From 8c3fce83e6032d9e9c920b40efe9e7fecd59300a Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Tue, 20 May 2025 21:53:57 +0200 Subject: [PATCH 01/41] Refactor for LEaflet V2 --- package.json | 2 +- pnpm-lock.yaml | 4002 ++++++++++++++----------- src/js/Draw/L.PM.Draw.Circle.js | 3 +- src/js/Draw/L.PM.Draw.CircleMarker.js | 33 +- src/js/Draw/L.PM.Draw.Cut.js | 39 +- src/js/Draw/L.PM.Draw.Line.js | 25 +- src/js/Draw/L.PM.Draw.Marker.js | 13 +- src/js/Draw/L.PM.Draw.Polygon.js | 9 +- src/js/Draw/L.PM.Draw.Rectangle.js | 31 +- src/js/Draw/L.PM.Draw.Text.js | 19 +- src/js/Draw/L.PM.Draw.js | 21 +- src/js/Edit/L.PM.Edit.Circle.js | 3 +- src/js/Edit/L.PM.Edit.CircleMarker.js | 21 +- src/js/Edit/L.PM.Edit.ImageOverlay.js | 3 +- src/js/Edit/L.PM.Edit.LayerGroup.js | 25 +- src/js/Edit/L.PM.Edit.Line.js | 29 +- src/js/Edit/L.PM.Edit.Marker.js | 3 +- src/js/Edit/L.PM.Edit.Polygon.js | 5 +- src/js/Edit/L.PM.Edit.Rectangle.js | 11 +- src/js/Edit/L.PM.Edit.Text.js | 23 +- src/js/Edit/L.PM.Edit.js | 11 +- src/js/L.PM.Map.js | 25 +- src/js/L.PM.Utils.js | 17 +- src/js/L.PM.js | 63 +- src/js/Mixins/Dragging.js | 63 +- src/js/Mixins/Events.js | 4 +- src/js/Mixins/Keyboard.js | 11 +- src/js/Mixins/MarkerLimits.js | 4 +- src/js/Mixins/Modes/Mode.Drag.js | 8 +- src/js/Mixins/Modes/Mode.Edit.js | 8 +- src/js/Mixins/Modes/Mode.Removal.js | 10 +- src/js/Mixins/Modes/Mode.Rotate.js | 14 +- src/js/Mixins/Rotating.js | 11 +- src/js/Mixins/Snapping.js | 39 +- src/js/Toolbar/L.Controls.js | 55 +- src/js/Toolbar/L.PM.Toolbar.js | 45 +- src/js/helpers/Matrix.js | 36 +- src/js/helpers/ModeHelper.js | 8 +- src/js/helpers/index.js | 35 +- src/js/helpers/turfHelper.js | 9 +- 40 files changed, 2634 insertions(+), 2162 deletions(-) diff --git a/package.json b/package.json index db0e163c..76e5aaba 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "eslint-plugin-cypress": "2.15.1", "eslint-plugin-import": "2.29.1", "husky": "^9.0.11", - "leaflet": "1.9.3", + "leaflet": "2.0.0-alpha", "lint-staged": "^15.2.5", "prettier": "3.2.4", "prosthetic-hand": "1.3.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6525f03a..9f7bb05a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,355 +1,1931 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@turf/boolean-contains': - specifier: ^6.5.0 - version: 6.5.0 - '@turf/kinks': - specifier: ^6.5.0 - version: 6.5.0 - '@turf/line-intersect': - specifier: ^6.5.0 - version: 6.5.0 - '@turf/line-split': - specifier: ^6.5.0 - version: 6.5.0 - lodash: - specifier: 4.17.21 - version: 4.17.21 - polyclip-ts: - specifier: ^0.16.5 - version: 0.16.5 - -devDependencies: - '@types/leaflet': - specifier: ^1.9.12 - version: 1.9.14 - cross-env: - specifier: ^7.0.3 - version: 7.0.3 - cypress: - specifier: ^13.11.0 - version: 13.16.0 - esbuild: - specifier: ^0.20.2 - version: 0.20.2 - eslint: - specifier: 8.56.0 - version: 8.56.0 - eslint-config-airbnb-base: - specifier: 15.0.0 - version: 15.0.0(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-config-prettier: - specifier: 9.1.0 - version: 9.1.0(eslint@8.56.0) - eslint-plugin-cypress: - specifier: 2.15.1 - version: 2.15.1(eslint@8.56.0) - eslint-plugin-import: - specifier: 2.29.1 - version: 2.29.1(eslint@8.56.0) - husky: - specifier: ^9.0.11 - version: 9.0.11 - leaflet: - specifier: 1.9.3 - version: 1.9.3 - lint-staged: - specifier: ^15.2.5 - version: 15.2.10 - prettier: - specifier: 3.2.4 - version: 3.2.4 - prosthetic-hand: - specifier: 1.3.1 - version: 1.3.1 - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@types/node@20.11.10)(typescript@5.3.3) +importers: + + .: + dependencies: + '@turf/boolean-contains': + specifier: ^6.5.0 + version: 6.5.0 + '@turf/kinks': + specifier: ^6.5.0 + version: 6.5.0 + '@turf/line-intersect': + specifier: ^6.5.0 + version: 6.5.0 + '@turf/line-split': + specifier: ^6.5.0 + version: 6.5.0 + lodash: + specifier: 4.17.21 + version: 4.17.21 + polyclip-ts: + specifier: ^0.16.5 + version: 0.16.5 + devDependencies: + '@types/leaflet': + specifier: ^1.9.12 + version: 1.9.14 + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + cypress: + specifier: ^13.11.0 + version: 13.16.0 + esbuild: + specifier: ^0.20.2 + version: 0.20.2 + eslint: + specifier: 8.56.0 + version: 8.56.0 + eslint-config-airbnb-base: + specifier: 15.0.0 + version: 15.0.0(eslint-plugin-import@2.29.1(eslint@8.56.0))(eslint@8.56.0) + eslint-config-prettier: + specifier: 9.1.0 + version: 9.1.0(eslint@8.56.0) + eslint-plugin-cypress: + specifier: 2.15.1 + version: 2.15.1(eslint@8.56.0) + eslint-plugin-import: + specifier: 2.29.1 + version: 2.29.1(eslint@8.56.0) + husky: + specifier: ^9.0.11 + version: 9.0.11 + leaflet: + specifier: 2.0.0-alpha + version: 2.0.0-alpha + lint-staged: + specifier: ^15.2.5 + version: 15.2.10 + prettier: + specifier: 3.2.4 + version: 3.2.4 + prosthetic-hand: + specifier: 1.3.1 + version: 1.3.1 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@20.11.10)(typescript@5.3.3) packages: - /@aashutoshrathi/word-wrap@1.2.6: + '@aashutoshrathi/word-wrap@1.2.6': resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} - dev: true - /@colors/colors@1.5.0: + '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - requiresBuild: true - dev: true - optional: true - /@cspotcode/source-map-support@0.8.1: + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: true - /@cypress/request@3.0.6: + '@cypress/request@3.0.6': resolution: {integrity: sha512-fi0eVdCOtKu5Ed6+E8mYxUF6ZTFJDZvHogCBelM0xVXmrDEkyM22gRArQzq1YcHPm1V47Vf/iAD+WgVdUlJCGg==} engines: {node: '>= 6'} - dependencies: - aws-sign2: 0.7.0 - aws4: 1.12.0 - caseless: 0.12.0 - combined-stream: 1.0.8 - extend: 3.0.2 - forever-agent: 0.6.1 - form-data: 4.0.1 - http-signature: 1.4.0 - is-typedarray: 1.0.0 - isstream: 0.1.2 - json-stringify-safe: 5.0.1 - mime-types: 2.1.35 - performance-now: 2.1.0 - qs: 6.13.0 - safe-buffer: 5.2.1 - tough-cookie: 5.0.0 - tunnel-agent: 0.6.0 - uuid: 8.3.2 - dev: true - /@cypress/xvfb@1.2.4(supports-color@8.1.1): + '@cypress/xvfb@1.2.4': resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==} - dependencies: - debug: 3.2.7(supports-color@8.1.1) - lodash.once: 4.1.1 - transitivePeerDependencies: - - supports-color - dev: true - /@esbuild/aix-ppc64@0.20.2: + '@esbuild/aix-ppc64@0.20.2': resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm64@0.20.2: + '@esbuild/android-arm64@0.20.2': resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} engines: {node: '>=12'} cpu: [arm64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.20.2: + '@esbuild/android-arm@0.20.2': resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} engines: {node: '>=12'} cpu: [arm] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.20.2: + '@esbuild/android-x64@0.20.2': resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} engines: {node: '>=12'} cpu: [x64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.20.2: + '@esbuild/darwin-arm64@0.20.2': resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.20.2: + '@esbuild/darwin-x64@0.20.2': resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.20.2: + '@esbuild/freebsd-arm64@0.20.2': resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.20.2: + '@esbuild/freebsd-x64@0.20.2': resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.20.2: + '@esbuild/linux-arm64@0.20.2': resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.20.2: + '@esbuild/linux-arm@0.20.2': resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} engines: {node: '>=12'} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.20.2: + '@esbuild/linux-ia32@0.20.2': resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} engines: {node: '>=12'} cpu: [ia32] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.20.2: + '@esbuild/linux-loong64@0.20.2': resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.20.2: + '@esbuild/linux-mips64el@0.20.2': resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.20.2: + '@esbuild/linux-ppc64@0.20.2': resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.20.2: + '@esbuild/linux-riscv64@0.20.2': resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.20.2: + '@esbuild/linux-s390x@0.20.2': resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.20.2: + '@esbuild/linux-x64@0.20.2': resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.20.2: + '@esbuild/netbsd-x64@0.20.2': resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.20.2: + '@esbuild/openbsd-x64@0.20.2': resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.20.2: + '@esbuild/sunos-x64@0.20.2': resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.20.2: + '@esbuild/win32-arm64@0.20.2': resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true + + '@esbuild/win32-ia32@0.20.2': + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.20.2': + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.10.0': + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.56.0': + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@humanwhocodes/config-array@0.11.14': + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.2': + resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + + '@jridgewell/resolve-uri@3.1.1': + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@tsconfig/node10@1.0.9': + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@turf/bbox@6.5.0': + resolution: {integrity: sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw==} + + '@turf/bearing@6.5.0': + resolution: {integrity: sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A==} + + '@turf/boolean-contains@6.5.0': + resolution: {integrity: sha512-4m8cJpbw+YQcKVGi8y0cHhBUnYT+QRfx6wzM4GI1IdtYH3p4oh/DOBJKrepQyiDzFDaNIjxuWXBh0ai1zVwOQQ==} + + '@turf/boolean-point-in-polygon@6.5.0': + resolution: {integrity: sha512-DtSuVFB26SI+hj0SjrvXowGTUCHlgevPAIsukssW6BG5MlNSBQAo70wpICBNJL6RjukXg8d2eXaAWuD/CqL00A==} + + '@turf/boolean-point-on-line@6.5.0': + resolution: {integrity: sha512-A1BbuQ0LceLHvq7F/P7w3QvfpmZqbmViIUPHdNLvZimFNLo4e6IQunmzbe+8aSStH9QRZm3VOflyvNeXvvpZEQ==} + + '@turf/destination@6.5.0': + resolution: {integrity: sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ==} + + '@turf/distance@6.5.0': + resolution: {integrity: sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg==} + + '@turf/helpers@6.5.0': + resolution: {integrity: sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==} + + '@turf/invariant@6.5.0': + resolution: {integrity: sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==} + + '@turf/kinks@6.5.0': + resolution: {integrity: sha512-ViCngdPt1eEL7hYUHR2eHR662GvCgTc35ZJFaNR6kRtr6D8plLaDju0FILeFFWSc+o8e3fwxZEJKmFj9IzPiIQ==} + + '@turf/line-intersect@6.5.0': + resolution: {integrity: sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA==} + + '@turf/line-segment@6.5.0': + resolution: {integrity: sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw==} + + '@turf/line-split@6.5.0': + resolution: {integrity: sha512-/rwUMVr9OI2ccJjw7/6eTN53URtGThNSD5I0GgxyFXMtxWiloRJ9MTff8jBbtPWrRka/Sh2GkwucVRAEakx9Sw==} + + '@turf/meta@6.5.0': + resolution: {integrity: sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA==} + + '@turf/nearest-point-on-line@6.5.0': + resolution: {integrity: sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg==} + + '@turf/square@6.5.0': + resolution: {integrity: sha512-BM2UyWDmiuHCadVhHXKIx5CQQbNCpOxB6S/aCNOCLbhCeypKX5Q0Aosc5YcmCJgkwO5BERCC6Ee7NMbNB2vHmQ==} + + '@turf/truncate@6.5.0': + resolution: {integrity: sha512-pFxg71pLk+eJj134Z9yUoRhIi8vqnnKvCYwdT4x/DQl/19RVdq1tV3yqOT3gcTQNfniteylL5qV1uTBDV5sgrg==} + + '@types/geojson@7946.0.13': + resolution: {integrity: sha512-bmrNrgKMOhM3WsafmbGmC+6dsF2Z308vLFsQ3a/bT8X8Sv5clVYpPars/UPq+sAaJP+5OoLAYgwbkS5QEJdLUQ==} + + '@types/geojson@7946.0.8': + resolution: {integrity: sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/leaflet@1.9.14': + resolution: {integrity: sha512-sx2q6MDJaajwhKeVgPSvqXd8rhNJSTA3tMidQGduZn9S6WBYxDkCpSpV5xXEmSg7Cgdk/5vJGhVF1kMYLzauBg==} + + '@types/node@20.11.10': + resolution: {integrity: sha512-rZEfe/hJSGYmdfX9tvcPMYeYPW2sNl50nsw4jZmRcaG0HIAb0WYEpsB05GOb53vjqpyE9GUhlDQ4jLSoB5q9kg==} + + '@types/sinonjs__fake-timers@8.1.1': + resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==} + + '@types/sizzle@2.3.8': + resolution: {integrity: sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + + acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + arch@2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + + array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} + + asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + + assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + + aws-sign2@0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + + aws4@1.12.0: + resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + blob-util@2.0.2: + resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + cachedir@2.4.0: + resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==} + engines: {node: '>=6'} + + call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caseless@0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + check-more-types@2.24.0: + resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==} + engines: {node: '>= 0.8.0'} + + ci-info@4.1.0: + resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==} + engines: {node: '>=8'} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-table3@0.6.3: + resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} + engines: {node: 10.* || >= 12.*} + + cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + + common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + confusing-browser-globals@1.0.11: + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + + core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + cypress@13.16.0: + resolution: {integrity: sha512-g6XcwqnvzXrqiBQR/5gN+QsyRmKRhls1y5E42fyOvsmU7JuY+wM6uHJWj4ZPttjabzbnRvxcik2WemR8+xT6FA==} + engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} + hasBin: true + + dashdash@1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + + dayjs@1.11.10: + resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + ecc-jsbn@0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + + emoji-regex@10.3.0: + resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + engines: {node: '>=12'} + hasBin: true + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-airbnb-base@15.0.0: + resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.2 + + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-module-utils@2.8.0: + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-cypress@2.15.1: + resolution: {integrity: sha512-eLHLWP5Q+I4j2AWepYq0PgFEei9/s5LvjuSqWrxurkg1YZ8ltxdvMNmdSf0drnsNo57CTgYY/NIHHLRSWejR7w==} + peerDependencies: + eslint: '>= 3.2.1' + + eslint-plugin-import@2.29.1: + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + eventemitter2@6.4.7: + resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + execa@4.1.0: + resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} + engines: {node: '>=10'} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + executable@4.1.1: + resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} + engines: {node: '>=4'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + + extsprintf@1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.17.0: + resolution: {integrity: sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + forever-agent@0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + geojson-rbush@3.2.0: + resolution: {integrity: sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w==} + + get-east-asian-width@1.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + engines: {node: '>=18'} + + get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + + getos@3.2.1: + resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==} + + getpass@0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + + global-dirs@3.0.1: + resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} + engines: {node: '>=10'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + + hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + + http-signature@1.4.0: + resolution: {integrity: sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==} + engines: {node: '>=0.10'} + + human-signals@1.1.1: + resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} + engines: {node: '>=8.12.0'} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + husky@9.0.11: + resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==} + engines: {node: '>=18'} + hasBin: true + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@2.0.0: + resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} + engines: {node: '>=10'} + + internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-installed-globally@0.4.0: + resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} + engines: {node: '>=10'} + + is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isstream@0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbn@0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsprim@2.0.2: + resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} + engines: {'0': node >=0.6.0} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + lazy-ass@1.6.0: + resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==} + engines: {node: '> 0.8'} + + leaflet@2.0.0-alpha: + resolution: {integrity: sha512-RnEJ3UYcuHPFFsDq0e2/QovyIaR3hhwiQpq3wrKnvprA/lsiAJpcxvkRZL3UwQ2xnKm1r2pYcMa+rcSKVwEQag==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + engines: {node: '>=14'} + + lint-staged@15.2.10: + resolution: {integrity: sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==} + engines: {node: '>=18.12.0'} + hasBin: true + + listr2@3.14.0: + resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==} + engines: {node: '>=10.0.0'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + + listr2@8.2.5: + resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} + engines: {node: '>=18.0.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-update@4.0.0: + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} + + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@5.2.0: + resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + object.entries@1.1.7: + resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + + object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + + ospath@1.2.2: + resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + polyclip-ts@0.16.5: + resolution: {integrity: sha512-ZchnG0zGZReHgEo3EYzEUi6UmfQFFzNnj6AFU+gBm+IJJ4qG9gL4CwjtCV6oi/PittUPpJLiLJxcn/AgrCBO+g==} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@3.2.4: + resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} + engines: {node: '>=14'} + hasBin: true + + pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + prosthetic-hand@1.3.1: + resolution: {integrity: sha512-t22TSxDtA9X2XBZk4lcxGXb5/iCOWrZ2BPi87f33JpOi8SCbgUDL8fa5Pa0138pirAoON+iACTGzadduBUCVdw==} + + proxy-from-env@1.0.0: + resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==} + + pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quickselect@2.0.0: + resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==} + + rbush@3.0.1: + resolution: {integrity: sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==} + + regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} + + request-progress@3.0.0: + resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.3.1: + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-array-concat@1.1.0: + resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.2: + resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + set-function-length@1.2.0: + resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} + engines: {node: '>= 0.4'} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + + splaytree-ts@1.0.1: + resolution: {integrity: sha512-B+VzCm33/KEchi/fzT6/3NRHm8k5+Kf37SBQO3meHHS/tK2xBnIm4ZvusQ1wUpHgKMCCqEWgXnwFXAa1nD289g==} + + sshpk@1.18.0: + resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@7.1.0: + resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} + engines: {node: '>=18'} + + string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + + string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + throttleit@1.0.1: + resolution: {integrity: sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tldts-core@6.1.63: + resolution: {integrity: sha512-H1XCt54xY+QPbwhTgmxLkepX0MVHu3USfMmejiCOdkMbRcP22Pn2FVF127r/GWXVDmXTRezyF3Ckvhn4Fs6j7Q==} + + tldts@6.1.63: + resolution: {integrity: sha512-YWwhsjyn9sB/1rOkSRYxvkN/wl5LFM1QDv6F2pVR+pb/jFne4EOBxHfkKVWvDIBEAw9iGOwwubHtQTm0WRT5sQ==} + hasBin: true + + tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tough-cookie@5.0.0: + resolution: {integrity: sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==} + engines: {node: '>=16'} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + + tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + + typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + verror@1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + yaml@2.5.1: + resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} + engines: {node: '>= 14'} + hasBin: true + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@aashutoshrathi/word-wrap@1.2.6': {} + + '@colors/colors@1.5.0': + optional: true + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@cypress/request@3.0.6': + dependencies: + aws-sign2: 0.7.0 + aws4: 1.12.0 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 4.0.1 + http-signature: 1.4.0 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.35 + performance-now: 2.1.0 + qs: 6.13.0 + safe-buffer: 5.2.1 + tough-cookie: 5.0.0 + tunnel-agent: 0.6.0 + uuid: 8.3.2 + + '@cypress/xvfb@1.2.4(supports-color@8.1.1)': + dependencies: + debug: 3.2.7(supports-color@8.1.1) + lodash.once: 4.1.1 + transitivePeerDependencies: + - supports-color + + '@esbuild/aix-ppc64@0.20.2': + optional: true + + '@esbuild/android-arm64@0.20.2': + optional: true + + '@esbuild/android-arm@0.20.2': + optional: true + + '@esbuild/android-x64@0.20.2': + optional: true + + '@esbuild/darwin-arm64@0.20.2': + optional: true + + '@esbuild/darwin-x64@0.20.2': + optional: true + + '@esbuild/freebsd-arm64@0.20.2': + optional: true + + '@esbuild/freebsd-x64@0.20.2': + optional: true + + '@esbuild/linux-arm64@0.20.2': + optional: true + + '@esbuild/linux-arm@0.20.2': + optional: true + + '@esbuild/linux-ia32@0.20.2': + optional: true + + '@esbuild/linux-loong64@0.20.2': + optional: true + + '@esbuild/linux-mips64el@0.20.2': + optional: true + + '@esbuild/linux-ppc64@0.20.2': + optional: true + + '@esbuild/linux-riscv64@0.20.2': + optional: true + + '@esbuild/linux-s390x@0.20.2': + optional: true + + '@esbuild/linux-x64@0.20.2': + optional: true + + '@esbuild/netbsd-x64@0.20.2': + optional: true + + '@esbuild/openbsd-x64@0.20.2': + optional: true + + '@esbuild/sunos-x64@0.20.2': optional: true - /@esbuild/win32-ia32@0.20.2: - resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true + '@esbuild/win32-arm64@0.20.2': optional: true - /@esbuild/win32-x64@0.20.2: - resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + '@esbuild/win32-ia32@0.20.2': optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@esbuild/win32-x64@0.20.2': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@8.56.0)': dependencies: eslint: 8.56.0 eslint-visitor-keys: 3.4.3 - dev: true - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true + '@eslint-community/regexpp@4.10.0': {} - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) @@ -362,174 +1938,113 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: true - /@eslint/js@8.56.0: - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@eslint/js@8.56.0': {} - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} + '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.2 debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true + '@humanwhocodes/module-importer@1.0.1': {} - /@humanwhocodes/object-schema@2.0.2: - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} - dev: true + '@humanwhocodes/object-schema@2.0.2': {} - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} - dev: true + '@jridgewell/resolve-uri@3.1.1': {} - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true + '@jridgewell/sourcemap-codec@1.4.15': {} - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true + '@nodelib/fs.stat@2.0.5': {} - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.0 - dev: true - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: true + '@tsconfig/node10@1.0.9': {} - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true + '@tsconfig/node12@1.0.11': {} - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true + '@tsconfig/node14@1.0.3': {} - /@tsconfig/node16@1.0.4: - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - dev: true + '@tsconfig/node16@1.0.4': {} - /@turf/bbox@6.5.0: - resolution: {integrity: sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw==} + '@turf/bbox@6.5.0': dependencies: '@turf/helpers': 6.5.0 '@turf/meta': 6.5.0 - dev: false - /@turf/bearing@6.5.0: - resolution: {integrity: sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A==} + '@turf/bearing@6.5.0': dependencies: '@turf/helpers': 6.5.0 '@turf/invariant': 6.5.0 - dev: false - /@turf/boolean-contains@6.5.0: - resolution: {integrity: sha512-4m8cJpbw+YQcKVGi8y0cHhBUnYT+QRfx6wzM4GI1IdtYH3p4oh/DOBJKrepQyiDzFDaNIjxuWXBh0ai1zVwOQQ==} + '@turf/boolean-contains@6.5.0': dependencies: '@turf/bbox': 6.5.0 '@turf/boolean-point-in-polygon': 6.5.0 '@turf/boolean-point-on-line': 6.5.0 '@turf/helpers': 6.5.0 '@turf/invariant': 6.5.0 - dev: false - /@turf/boolean-point-in-polygon@6.5.0: - resolution: {integrity: sha512-DtSuVFB26SI+hj0SjrvXowGTUCHlgevPAIsukssW6BG5MlNSBQAo70wpICBNJL6RjukXg8d2eXaAWuD/CqL00A==} + '@turf/boolean-point-in-polygon@6.5.0': dependencies: '@turf/helpers': 6.5.0 '@turf/invariant': 6.5.0 - dev: false - /@turf/boolean-point-on-line@6.5.0: - resolution: {integrity: sha512-A1BbuQ0LceLHvq7F/P7w3QvfpmZqbmViIUPHdNLvZimFNLo4e6IQunmzbe+8aSStH9QRZm3VOflyvNeXvvpZEQ==} + '@turf/boolean-point-on-line@6.5.0': dependencies: '@turf/helpers': 6.5.0 '@turf/invariant': 6.5.0 - dev: false - /@turf/destination@6.5.0: - resolution: {integrity: sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ==} + '@turf/destination@6.5.0': dependencies: '@turf/helpers': 6.5.0 '@turf/invariant': 6.5.0 - dev: false - /@turf/distance@6.5.0: - resolution: {integrity: sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg==} + '@turf/distance@6.5.0': dependencies: '@turf/helpers': 6.5.0 '@turf/invariant': 6.5.0 - dev: false - /@turf/helpers@6.5.0: - resolution: {integrity: sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==} - dev: false + '@turf/helpers@6.5.0': {} - /@turf/invariant@6.5.0: - resolution: {integrity: sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==} + '@turf/invariant@6.5.0': dependencies: '@turf/helpers': 6.5.0 - dev: false - /@turf/kinks@6.5.0: - resolution: {integrity: sha512-ViCngdPt1eEL7hYUHR2eHR662GvCgTc35ZJFaNR6kRtr6D8plLaDju0FILeFFWSc+o8e3fwxZEJKmFj9IzPiIQ==} + '@turf/kinks@6.5.0': dependencies: '@turf/helpers': 6.5.0 - dev: false - /@turf/line-intersect@6.5.0: - resolution: {integrity: sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA==} + '@turf/line-intersect@6.5.0': dependencies: '@turf/helpers': 6.5.0 '@turf/invariant': 6.5.0 '@turf/line-segment': 6.5.0 '@turf/meta': 6.5.0 geojson-rbush: 3.2.0 - dev: false - /@turf/line-segment@6.5.0: - resolution: {integrity: sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw==} + '@turf/line-segment@6.5.0': dependencies: '@turf/helpers': 6.5.0 '@turf/invariant': 6.5.0 '@turf/meta': 6.5.0 - dev: false - /@turf/line-split@6.5.0: - resolution: {integrity: sha512-/rwUMVr9OI2ccJjw7/6eTN53URtGThNSD5I0GgxyFXMtxWiloRJ9MTff8jBbtPWrRka/Sh2GkwucVRAEakx9Sw==} + '@turf/line-split@6.5.0': dependencies: '@turf/bbox': 6.5.0 '@turf/helpers': 6.5.0 @@ -541,16 +2056,12 @@ packages: '@turf/square': 6.5.0 '@turf/truncate': 6.5.0 geojson-rbush: 3.2.0 - dev: false - /@turf/meta@6.5.0: - resolution: {integrity: sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA==} + '@turf/meta@6.5.0': dependencies: '@turf/helpers': 6.5.0 - dev: false - /@turf/nearest-point-on-line@6.5.0: - resolution: {integrity: sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg==} + '@turf/nearest-point-on-line@6.5.0': dependencies: '@turf/bearing': 6.5.0 '@turf/destination': 6.5.0 @@ -559,207 +2070,124 @@ packages: '@turf/invariant': 6.5.0 '@turf/line-intersect': 6.5.0 '@turf/meta': 6.5.0 - dev: false - /@turf/square@6.5.0: - resolution: {integrity: sha512-BM2UyWDmiuHCadVhHXKIx5CQQbNCpOxB6S/aCNOCLbhCeypKX5Q0Aosc5YcmCJgkwO5BERCC6Ee7NMbNB2vHmQ==} + '@turf/square@6.5.0': dependencies: '@turf/distance': 6.5.0 '@turf/helpers': 6.5.0 - dev: false - /@turf/truncate@6.5.0: - resolution: {integrity: sha512-pFxg71pLk+eJj134Z9yUoRhIi8vqnnKvCYwdT4x/DQl/19RVdq1tV3yqOT3gcTQNfniteylL5qV1uTBDV5sgrg==} + '@turf/truncate@6.5.0': dependencies: '@turf/helpers': 6.5.0 '@turf/meta': 6.5.0 - dev: false - /@types/geojson@7946.0.13: - resolution: {integrity: sha512-bmrNrgKMOhM3WsafmbGmC+6dsF2Z308vLFsQ3a/bT8X8Sv5clVYpPars/UPq+sAaJP+5OoLAYgwbkS5QEJdLUQ==} - dev: true + '@types/geojson@7946.0.13': {} - /@types/geojson@7946.0.8: - resolution: {integrity: sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==} - dev: false + '@types/geojson@7946.0.8': {} - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true + '@types/json5@0.0.29': {} - /@types/leaflet@1.9.14: - resolution: {integrity: sha512-sx2q6MDJaajwhKeVgPSvqXd8rhNJSTA3tMidQGduZn9S6WBYxDkCpSpV5xXEmSg7Cgdk/5vJGhVF1kMYLzauBg==} + '@types/leaflet@1.9.14': dependencies: '@types/geojson': 7946.0.13 - dev: true - /@types/node@20.11.10: - resolution: {integrity: sha512-rZEfe/hJSGYmdfX9tvcPMYeYPW2sNl50nsw4jZmRcaG0HIAb0WYEpsB05GOb53vjqpyE9GUhlDQ4jLSoB5q9kg==} + '@types/node@20.11.10': dependencies: undici-types: 5.26.5 - dev: true - /@types/sinonjs__fake-timers@8.1.1: - resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==} - dev: true + '@types/sinonjs__fake-timers@8.1.1': {} - /@types/sizzle@2.3.8: - resolution: {integrity: sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==} - dev: true + '@types/sizzle@2.3.8': {} - /@types/yauzl@2.10.3: - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - requiresBuild: true + '@types/yauzl@2.10.3': dependencies: '@types/node': 20.11.10 - dev: true optional: true - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true + '@ungap/structured-clone@1.2.0': {} - /acorn-jsx@5.3.2(acorn@8.11.3): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-jsx@5.3.2(acorn@8.11.3): dependencies: acorn: 8.11.3 - dev: true - /acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} - engines: {node: '>=0.4.0'} - dev: true + acorn-walk@8.3.2: {} - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@8.11.3: {} - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 - dev: true - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true - /ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - dev: true + ansi-colors@4.1.3: {} - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 - dev: true - /ansi-escapes@7.0.0: - resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} - engines: {node: '>=18'} + ansi-escapes@7.0.0: dependencies: environment: 1.1.0 - dev: true - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + ansi-regex@5.0.1: {} - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true + ansi-regex@6.0.1: {} - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - dev: true - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: true + ansi-styles@6.2.1: {} - /arch@2.2.0: - resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} - dev: true + arch@2.2.0: {} - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true + arg@4.1.3: {} - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + argparse@2.0.1: {} - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + array-buffer-byte-length@1.0.0: dependencies: call-bind: 1.0.5 is-array-buffer: 3.0.2 - dev: true - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} + array-includes@3.1.7: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 get-intrinsic: 1.2.2 is-string: 1.0.7 - dev: true - /array.prototype.findlastindex@1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} - engines: {node: '>= 0.4'} + array.prototype.findlastindex@1.2.3: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 get-intrinsic: 1.2.2 - dev: true - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} + array.prototype.flat@1.3.2: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} + array.prototype.flatmap@1.3.2: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 - dev: true - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} - engines: {node: '>= 0.4'} + arraybuffer.prototype.slice@1.0.2: dependencies: array-buffer-byte-length: 1.0.0 call-bind: 1.0.5 @@ -768,276 +2196,151 @@ packages: get-intrinsic: 1.2.2 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 - dev: true - /asn1@0.2.6: - resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + asn1@0.2.6: dependencies: safer-buffer: 2.1.2 - dev: true - /assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} - engines: {node: '>=0.8'} - dev: true + assert-plus@1.0.0: {} - /astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - dev: true + astral-regex@2.0.0: {} - /async@3.2.5: - resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} - dev: true + async@3.2.5: {} - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: true + asynckit@0.4.0: {} - /at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - dev: true + at-least-node@1.0.0: {} - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - dev: true + available-typed-arrays@1.0.5: {} - /aws-sign2@0.7.0: - resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} - dev: true + aws-sign2@0.7.0: {} - /aws4@1.12.0: - resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} - dev: true + aws4@1.12.0: {} - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + balanced-match@1.0.2: {} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true + base64-js@1.5.1: {} - /bcrypt-pbkdf@1.0.2: - resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + bcrypt-pbkdf@1.0.2: dependencies: tweetnacl: 0.14.5 - dev: true - /bignumber.js@9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} - dev: false + bignumber.js@9.1.2: {} - /blob-util@2.0.2: - resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==} - dev: true + blob-util@2.0.2: {} - /bluebird@3.7.2: - resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - dev: true + bluebird@3.7.2: {} - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - /braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + braces@3.0.3: dependencies: fill-range: 7.1.1 - dev: true - /buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - dev: true + buffer-crc32@0.2.13: {} - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@5.7.1: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true - /cachedir@2.4.0: - resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==} - engines: {node: '>=6'} - dev: true + cachedir@2.4.0: {} - /call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + call-bind@1.0.5: dependencies: function-bind: 1.1.2 get-intrinsic: 1.2.2 set-function-length: 1.2.0 - dev: true - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} + call-bind@1.0.7: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 set-function-length: 1.2.2 - dev: true - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true + callsites@3.1.0: {} - /caseless@0.12.0: - resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} - dev: true + caseless@0.12.0: {} - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true + chalk@5.3.0: {} - /check-more-types@2.24.0: - resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==} - engines: {node: '>= 0.8.0'} - dev: true + check-more-types@2.24.0: {} - /ci-info@4.1.0: - resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==} - engines: {node: '>=8'} - dev: true + ci-info@4.1.0: {} - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true + clean-stack@2.2.0: {} - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} + cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 - dev: true - /cli-cursor@5.0.0: - resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} - engines: {node: '>=18'} + cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 - dev: true - /cli-table3@0.6.3: - resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} - engines: {node: 10.* || >= 12.*} + cli-table3@0.6.3: dependencies: string-width: 4.2.3 optionalDependencies: '@colors/colors': 1.5.0 - dev: true - /cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} + cli-truncate@2.1.0: dependencies: slice-ansi: 3.0.0 string-width: 4.2.3 - dev: true - /cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} + cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 string-width: 7.1.0 - dev: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - dev: true - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + color-name@1.1.4: {} - /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - dev: true + colorette@2.0.20: {} - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - dev: true - /commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} - dev: true + commander@12.1.0: {} - /commander@6.2.1: - resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} - engines: {node: '>= 6'} - dev: true + commander@6.2.1: {} - /common-tags@1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} - engines: {node: '>=4.0.0'} - dev: true + common-tags@1.8.2: {} - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + concat-map@0.0.1: {} - /confusing-browser-globals@1.0.11: - resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} - dev: true + confusing-browser-globals@1.0.11: {} - /core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - dev: true + core-util-is@1.0.2: {} - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true + create-require@1.1.1: {} - /cross-env@7.0.3: - resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} - engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} - hasBin: true + cross-env@7.0.3: dependencies: cross-spawn: 7.0.3 - dev: true - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true - /cypress@13.16.0: - resolution: {integrity: sha512-g6XcwqnvzXrqiBQR/5gN+QsyRmKRhls1y5E42fyOvsmU7JuY+wM6uHJWj4ZPttjabzbnRvxcik2WemR8+xT6FA==} - engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} - hasBin: true - requiresBuild: true + cypress@13.16.0: dependencies: '@cypress/request': 3.0.6 '@cypress/xvfb': 1.2.4(supports-color@8.1.1) @@ -1082,148 +2385,82 @@ packages: tree-kill: 1.2.2 untildify: 4.0.0 yauzl: 2.10.0 - dev: true - /dashdash@1.14.1: - resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} - engines: {node: '>=0.10'} + dashdash@1.14.1: dependencies: assert-plus: 1.0.0 - dev: true - /dayjs@1.11.10: - resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} - dev: true + dayjs@1.11.10: {} - /debug@3.2.7(supports-color@8.1.1): - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@3.2.7(supports-color@8.1.1): dependencies: ms: 2.1.3 + optionalDependencies: supports-color: 8.1.1 - dev: true - /debug@4.3.4(supports-color@8.1.1): - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.4(supports-color@8.1.1): dependencies: ms: 2.1.2 + optionalDependencies: supports-color: 8.1.1 - dev: true - /debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.7: dependencies: ms: 2.1.3 - dev: true - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true + deep-is@0.1.4: {} - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} - engines: {node: '>= 0.4'} + define-data-property@1.1.1: dependencies: get-intrinsic: 1.2.2 gopd: 1.0.1 has-property-descriptors: 1.0.1 - dev: true - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 gopd: 1.0.1 - dev: true - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + define-properties@1.2.1: dependencies: define-data-property: 1.1.1 has-property-descriptors: 1.0.1 object-keys: 1.1.1 - dev: true - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: true + delayed-stream@1.0.0: {} - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true + diff@4.0.2: {} - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + doctrine@2.1.0: dependencies: esutils: 2.0.3 - dev: true - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + doctrine@3.0.0: dependencies: esutils: 2.0.3 - dev: true - /ecc-jsbn@0.1.2: - resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + ecc-jsbn@0.1.2: dependencies: jsbn: 0.1.1 safer-buffer: 2.1.2 - dev: true - /emoji-regex@10.3.0: - resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} - dev: true + emoji-regex@10.3.0: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + emoji-regex@8.0.0: {} - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + end-of-stream@1.4.4: dependencies: once: 1.4.0 - dev: true - /enquirer@2.4.1: - resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} - engines: {node: '>=8.6'} + enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 strip-ansi: 6.0.1 - dev: true - /environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} - dev: true + environment@1.1.0: {} - /es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} - engines: {node: '>= 0.4'} + es-abstract@1.22.3: dependencies: array-buffer-byte-length: 1.0.0 arraybuffer.prototype.slice: 1.0.2 @@ -1264,49 +2501,30 @@ packages: typed-array-length: 1.0.4 unbox-primitive: 1.0.2 which-typed-array: 1.1.13 - dev: true - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} + es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 - dev: true - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - dev: true + es-errors@1.3.0: {} - /es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} - engines: {node: '>= 0.4'} + es-set-tostringtag@2.0.2: dependencies: get-intrinsic: 1.2.2 has-tostringtag: 1.0.0 hasown: 2.0.0 - dev: true - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + es-shim-unscopables@1.0.2: dependencies: hasown: 2.0.0 - dev: true - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} + es-to-primitive@1.2.1: dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - dev: true - /esbuild@0.20.2: - resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true + esbuild@0.20.2: optionalDependencies: '@esbuild/aix-ppc64': 0.20.2 '@esbuild/android-arm': 0.20.2 @@ -1330,25 +2548,13 @@ packages: '@esbuild/sunos-x64': 0.20.2 '@esbuild/win32-arm64': 0.20.2 '@esbuild/win32-ia32': 0.20.2 - '@esbuild/win32-x64': 0.20.2 - dev: true - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true - - /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.1)(eslint@8.56.0): - resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.2 + '@esbuild/win32-x64': 0.20.2 + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.1(eslint@8.56.0))(eslint@8.56.0): dependencies: confusing-browser-globals: 1.0.11 eslint: 8.56.0 @@ -1356,73 +2562,34 @@ packages: object.assign: 4.1.5 object.entries: 1.1.7 semver: 6.3.1 - dev: true - /eslint-config-prettier@9.1.0(eslint@8.56.0): - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' + eslint-config-prettier@9.1.0(eslint@8.56.0): dependencies: eslint: 8.56.0 - dev: true - /eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7(supports-color@8.1.1) is-core-module: 2.13.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color - dev: true - /eslint-module-utils@2.8.0(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true + eslint-module-utils@2.8.0(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): dependencies: debug: 3.2.7(supports-color@8.1.1) + optionalDependencies: eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - dev: true - /eslint-plugin-cypress@2.15.1(eslint@8.56.0): - resolution: {integrity: sha512-eLHLWP5Q+I4j2AWepYq0PgFEei9/s5LvjuSqWrxurkg1YZ8ltxdvMNmdSf0drnsNo57CTgYY/NIHHLRSWejR7w==} - peerDependencies: - eslint: '>= 3.2.1' + eslint-plugin-cypress@2.15.1(eslint@8.56.0): dependencies: eslint: 8.56.0 globals: 13.24.0 - dev: true - /eslint-plugin-import@2.29.1(eslint@8.56.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + eslint-plugin-import@2.29.1(eslint@8.56.0): dependencies: array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 @@ -1446,25 +2613,15 @@ packages: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + eslint-visitor-keys@3.4.3: {} - /eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + eslint@8.56.0: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/regexpp': 4.10.0 @@ -1506,52 +2663,30 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@9.6.1: dependencies: acorn: 8.11.3 acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 3.4.3 - dev: true - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} + esquery@1.5.0: dependencies: estraverse: 5.3.0 - dev: true - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - dev: true - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + estraverse@5.3.0: {} - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + esutils@2.0.3: {} - /eventemitter2@6.4.7: - resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==} - dev: true + eventemitter2@6.4.7: {} - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - dev: true + eventemitter3@5.0.1: {} - /execa@4.1.0: - resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} - engines: {node: '>=10'} + execa@4.1.0: dependencies: cross-spawn: 7.0.3 get-stream: 5.2.0 @@ -1562,11 +2697,8 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true - /execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} + execa@8.0.1: dependencies: cross-spawn: 7.0.3 get-stream: 8.0.1 @@ -1577,23 +2709,14 @@ packages: onetime: 6.0.0 signal-exit: 4.1.0 strip-final-newline: 3.0.0 - dev: true - /executable@4.1.1: - resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} - engines: {node: '>=4'} + executable@4.1.1: dependencies: pify: 2.3.0 - dev: true - /extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - dev: true + extend@3.0.2: {} - /extract-zip@2.0.1(supports-color@8.1.1): - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true + extract-zip@2.0.1(supports-color@8.1.1): dependencies: debug: 4.3.4(supports-color@8.1.1) get-stream: 5.2.0 @@ -1602,206 +2725,129 @@ packages: '@types/yauzl': 2.10.3 transitivePeerDependencies: - supports-color - dev: true - /extsprintf@1.3.0: - resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} - engines: {'0': node >=0.6.0} - dev: true + extsprintf@1.3.0: {} - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true + fast-deep-equal@3.1.3: {} - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + fast-json-stable-stringify@2.1.0: {} - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + fast-levenshtein@2.0.6: {} - /fastq@1.17.0: - resolution: {integrity: sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==} + fastq@1.17.0: dependencies: reusify: 1.0.4 - dev: true - /fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fd-slicer@1.1.0: dependencies: pend: 1.2.0 - dev: true - /figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 - dev: true - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 - dev: true - /fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@3.2.0: dependencies: flatted: 3.2.9 keyv: 4.5.4 rimraf: 3.0.2 - dev: true - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - dev: true + flatted@3.2.9: {} - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.3: dependencies: is-callable: 1.2.7 - dev: true - /forever-agent@0.6.1: - resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} - dev: true + forever-agent@0.6.1: {} - /form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} - engines: {node: '>= 6'} + form-data@4.0.1: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - dev: true - /fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} + fs-extra@9.1.0: dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + fs.realpath@1.0.0: {} - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true + function-bind@1.1.2: {} - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} + function.prototype.name@1.1.6: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 functions-have-names: 1.2.3 - dev: true - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true + functions-have-names@1.2.3: {} - /geojson-rbush@3.2.0: - resolution: {integrity: sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w==} + geojson-rbush@3.2.0: dependencies: '@turf/bbox': 6.5.0 '@turf/helpers': 6.5.0 '@turf/meta': 6.5.0 '@types/geojson': 7946.0.8 rbush: 3.0.1 - dev: false - /get-east-asian-width@1.2.0: - resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} - engines: {node: '>=18'} - dev: true + get-east-asian-width@1.2.0: {} - /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + get-intrinsic@1.2.2: dependencies: function-bind: 1.1.2 has-proto: 1.0.1 has-symbols: 1.0.3 hasown: 2.0.0 - dev: true - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 has-proto: 1.0.1 has-symbols: 1.0.3 hasown: 2.0.0 - dev: true - /get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} + get-stream@5.2.0: dependencies: pump: 3.0.0 - dev: true - /get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - dev: true + get-stream@8.0.1: {} - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} + get-symbol-description@1.0.0: dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 - dev: true - /getos@3.2.1: - resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==} + getos@3.2.1: dependencies: async: 3.2.5 - dev: true - /getpass@0.1.7: - resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + getpass@0.1.7: dependencies: assert-plus: 1.0.0 - dev: true - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -1809,424 +2855,233 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /global-dirs@3.0.1: - resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} - engines: {node: '>=10'} + global-dirs@3.0.1: dependencies: ini: 2.0.0 - dev: true - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@13.24.0: dependencies: type-fest: 0.20.2 - dev: true - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} + globalthis@1.0.3: dependencies: define-properties: 1.2.1 - dev: true - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.0.1: dependencies: get-intrinsic: 1.2.4 - dev: true - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true + graceful-fs@4.2.11: {} - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true + graphemer@1.4.0: {} - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true + has-bigints@1.0.2: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + has-flag@4.0.0: {} - /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + has-property-descriptors@1.0.1: dependencies: get-intrinsic: 1.2.2 - dev: true - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.0 - dev: true - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - dev: true + has-proto@1.0.1: {} - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true + has-symbols@1.0.3: {} - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.0: dependencies: has-symbols: 1.0.3 - dev: true - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} + hasown@2.0.0: dependencies: function-bind: 1.1.2 - dev: true - /http-signature@1.4.0: - resolution: {integrity: sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==} - engines: {node: '>=0.10'} + http-signature@1.4.0: dependencies: assert-plus: 1.0.0 jsprim: 2.0.2 sshpk: 1.18.0 - dev: true - /human-signals@1.1.1: - resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} - engines: {node: '>=8.12.0'} - dev: true + human-signals@1.1.1: {} - /human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - dev: true + human-signals@5.0.0: {} - /husky@9.0.11: - resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==} - engines: {node: '>=18'} - hasBin: true - dev: true + husky@9.0.11: {} - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true + ieee754@1.2.1: {} - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} - engines: {node: '>= 4'} - dev: true + ignore@5.3.0: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true + imurmurhash@0.1.4: {} - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true + indent-string@4.0.0: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true + inherits@2.0.4: {} - /ini@2.0.0: - resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} - engines: {node: '>=10'} - dev: true + ini@2.0.0: {} - /internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} - engines: {node: '>= 0.4'} + internal-slot@1.0.6: dependencies: get-intrinsic: 1.2.2 hasown: 2.0.0 side-channel: 1.0.4 - dev: true - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + is-array-buffer@3.0.2: dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 is-typed-array: 1.1.12 - dev: true - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 - dev: true - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + is-boolean-object@1.1.2: dependencies: call-bind: 1.0.5 has-tostringtag: 1.0.0 - dev: true - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + is-callable@1.2.7: {} - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-core-module@2.13.1: dependencies: hasown: 2.0.0 - dev: true - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + is-date-object@1.0.5: dependencies: has-tostringtag: 1.0.0 - dev: true - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true + is-fullwidth-code-point@3.0.0: {} - /is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - dev: true + is-fullwidth-code-point@4.0.0: {} - /is-fullwidth-code-point@5.0.0: - resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} - engines: {node: '>=18'} + is-fullwidth-code-point@5.0.0: dependencies: get-east-asian-width: 1.2.0 - dev: true - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-installed-globally@0.4.0: - resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} - engines: {node: '>=10'} + is-installed-globally@0.4.0: dependencies: global-dirs: 3.0.1 is-path-inside: 3.0.3 - dev: true - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: true + is-negative-zero@2.0.2: {} - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} + is-number-object@1.0.7: dependencies: has-tostringtag: 1.0.0 - dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + is-number@7.0.0: {} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true + is-path-inside@3.0.3: {} - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} + is-regex@1.1.4: dependencies: call-bind: 1.0.5 has-tostringtag: 1.0.0 - dev: true - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + is-shared-array-buffer@1.0.2: dependencies: call-bind: 1.0.5 - dev: true - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true + is-stream@2.0.1: {} - /is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + is-stream@3.0.0: {} - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + is-string@1.0.7: dependencies: has-tostringtag: 1.0.0 - dev: true - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 - dev: true - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.12: dependencies: which-typed-array: 1.1.13 - dev: true - /is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - dev: true + is-typedarray@1.0.0: {} - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true + is-unicode-supported@0.1.0: {} - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakref@1.0.2: dependencies: call-bind: 1.0.5 - dev: true - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + isarray@2.0.5: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + isexe@2.0.0: {} - /isstream@0.1.2: - resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} - dev: true + isstream@0.1.2: {} - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - /jsbn@0.1.1: - resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - dev: true + jsbn@0.1.1: {} - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true + json-buffer@3.0.1: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + json-schema-traverse@0.4.1: {} - /json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - dev: true + json-schema@0.4.0: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true + json-stable-stringify-without-jsonify@1.0.1: {} - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - dev: true + json-stringify-safe@5.0.1: {} - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true + json5@1.0.2: dependencies: minimist: 1.2.8 - dev: true - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.1.0: dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - dev: true - /jsprim@2.0.2: - resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} - engines: {'0': node >=0.6.0} + jsprim@2.0.2: dependencies: assert-plus: 1.0.0 extsprintf: 1.3.0 json-schema: 0.4.0 verror: 1.10.0 - dev: true - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 - dev: true - /lazy-ass@1.6.0: - resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==} - engines: {node: '> 0.8'} - dev: true + lazy-ass@1.6.0: {} - /leaflet@1.9.3: - resolution: {integrity: sha512-iB2cR9vAkDOu5l3HAay2obcUHZ7xwUBBjph8+PGtmW/2lYhbLizWtG7nTeYht36WfOslixQF9D/uSIzhZgGMfQ==} - dev: true + leaflet@2.0.0-alpha: {} - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /lilconfig@3.1.2: - resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} - engines: {node: '>=14'} - dev: true + lilconfig@3.1.2: {} - /lint-staged@15.2.10: - resolution: {integrity: sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==} - engines: {node: '>=18.12.0'} - hasBin: true + lint-staged@15.2.10: dependencies: chalk: 5.3.0 commander: 12.1.0 @@ -2240,31 +3095,21 @@ packages: yaml: 2.5.1 transitivePeerDependencies: - supports-color - dev: true - /listr2@3.14.0(enquirer@2.4.1): - resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==} - engines: {node: '>=10.0.0'} - peerDependencies: - enquirer: '>= 2.3.0 < 3' - peerDependenciesMeta: - enquirer: - optional: true + listr2@3.14.0(enquirer@2.4.1): dependencies: cli-truncate: 2.1.0 colorette: 2.0.20 - enquirer: 2.4.1 log-update: 4.0.0 p-map: 4.0.0 rfdc: 1.3.1 rxjs: 7.8.1 through: 2.3.8 wrap-ansi: 7.0.0 - dev: true + optionalDependencies: + enquirer: 2.4.1 - /listr2@8.2.5: - resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} - engines: {node: '>=18.0.0'} + listr2@8.2.5: dependencies: cli-truncate: 4.0.0 colorette: 2.0.20 @@ -2272,219 +3117,131 @@ packages: log-update: 6.1.0 rfdc: 1.4.1 wrap-ansi: 9.0.0 - dev: true - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + lodash.merge@4.6.2: {} - /lodash.once@4.1.1: - resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - dev: true + lodash.once@4.1.1: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lodash@4.17.21: {} - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + log-symbols@4.1.0: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: true - /log-update@4.0.0: - resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} - engines: {node: '>=10'} + log-update@4.0.0: dependencies: ansi-escapes: 4.3.2 cli-cursor: 3.1.0 slice-ansi: 4.0.0 wrap-ansi: 6.2.0 - dev: true - /log-update@6.1.0: - resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} - engines: {node: '>=18'} + log-update@6.1.0: dependencies: ansi-escapes: 7.0.0 cli-cursor: 5.0.0 slice-ansi: 7.1.0 strip-ansi: 7.1.0 wrap-ansi: 9.0.0 - dev: true - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true + make-error@1.3.6: {} - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + merge-stream@2.0.0: {} - /micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 - dev: true - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: true + mime-db@1.52.0: {} - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - dev: true - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true + mimic-fn@2.1.0: {} - /mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - dev: true + mimic-fn@4.0.0: {} - /mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} - engines: {node: '>=18'} - dev: true + mimic-function@5.0.1: {} - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true + minimist@1.2.8: {} - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true + ms@2.1.2: {} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true + ms@2.1.3: {} - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + natural-compare@1.4.0: {} - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 - dev: true - /npm-run-path@5.2.0: - resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + npm-run-path@5.2.0: dependencies: path-key: 4.0.0 - dev: true - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: true + object-inspect@1.13.1: {} - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + object-keys@1.1.1: {} - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} + object.assign@4.1.5: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - dev: true - /object.entries@1.1.7: - resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} - engines: {node: '>= 0.4'} + object.entries@1.1.7: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 - dev: true - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} - engines: {node: '>= 0.4'} + object.fromentries@2.0.7: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 - dev: true - /object.groupby@1.0.1: - resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + object.groupby@1.0.1: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 get-intrinsic: 1.2.2 - dev: true - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} - engines: {node: '>= 0.4'} + object.values@1.1.7: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 - dev: true - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - dev: true - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 - dev: true - /onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} + onetime@6.0.0: dependencies: mimic-fn: 4.0.0 - dev: true - /onetime@7.0.0: - resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} - engines: {node: '>=18'} + onetime@7.0.0: dependencies: mimic-function: 5.0.1 - dev: true - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} + optionator@0.9.3: dependencies: '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 @@ -2492,286 +3249,157 @@ packages: levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /ospath@1.2.2: - resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} - dev: true + ospath@1.2.2: {} - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} + p-map@4.0.0: dependencies: aggregate-error: 3.1.0 - dev: true - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + parent-module@1.0.1: dependencies: callsites: 3.1.0 - dev: true - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + path-exists@4.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-is-absolute@1.0.1: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true + path-key@3.1.1: {} - /path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - dev: true + path-key@4.0.0: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + path-parse@1.0.7: {} - /pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - dev: true + pend@1.2.0: {} - /performance-now@2.1.0: - resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - dev: true + performance-now@2.1.0: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picomatch@2.3.1: {} - /pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true - dev: true + pidtree@0.6.0: {} - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: true + pify@2.3.0: {} - /polyclip-ts@0.16.5: - resolution: {integrity: sha512-ZchnG0zGZReHgEo3EYzEUi6UmfQFFzNnj6AFU+gBm+IJJ4qG9gL4CwjtCV6oi/PittUPpJLiLJxcn/AgrCBO+g==} + polyclip-ts@0.16.5: dependencies: bignumber.js: 9.1.2 splaytree-ts: 1.0.1 - dev: false - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true + prelude-ls@1.2.1: {} - /prettier@3.2.4: - resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} - engines: {node: '>=14'} - hasBin: true - dev: true + prettier@3.2.4: {} - /pretty-bytes@5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} - engines: {node: '>=6'} - dev: true + pretty-bytes@5.6.0: {} - /process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - dev: true + process@0.11.10: {} - /prosthetic-hand@1.3.1: - resolution: {integrity: sha512-t22TSxDtA9X2XBZk4lcxGXb5/iCOWrZ2BPi87f33JpOi8SCbgUDL8fa5Pa0138pirAoON+iACTGzadduBUCVdw==} - dev: true + prosthetic-hand@1.3.1: {} - /proxy-from-env@1.0.0: - resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==} - dev: true + proxy-from-env@1.0.0: {} - /pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + pump@3.0.0: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - dev: true - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true + punycode@2.3.1: {} - /qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} - engines: {node: '>=0.6'} + qs@6.13.0: dependencies: side-channel: 1.0.6 - dev: true - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + queue-microtask@1.2.3: {} - /quickselect@2.0.0: - resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==} - dev: false + quickselect@2.0.0: {} - /rbush@3.0.1: - resolution: {integrity: sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==} + rbush@3.0.1: dependencies: quickselect: 2.0.0 - dev: false - /regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} - engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.1: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 set-function-name: 2.0.1 - dev: true - /request-progress@3.0.0: - resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==} + request-progress@3.0.0: dependencies: throttleit: 1.0.1 - dev: true - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true + resolve-from@4.0.0: {} - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true + resolve@1.22.8: dependencies: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true - /restore-cursor@5.1.0: - resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} - engines: {node: '>=18'} + restore-cursor@5.1.0: dependencies: onetime: 7.0.0 signal-exit: 4.1.0 - dev: true - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + reusify@1.0.4: {} - /rfdc@1.3.1: - resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} - dev: true + rfdc@1.3.1: {} - /rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - dev: true + rfdc@1.4.1: {} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true + rimraf@3.0.2: dependencies: glob: 7.2.3 - dev: true - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.1: dependencies: tslib: 2.8.1 - dev: true - /safe-array-concat@1.1.0: - resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} - engines: {node: '>=0.4'} + safe-array-concat@1.1.0: dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 has-symbols: 1.0.3 isarray: 2.0.5 - dev: true - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true + safe-buffer@5.2.1: {} - /safe-regex-test@1.0.2: - resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} - engines: {node: '>= 0.4'} + safe-regex-test@1.0.2: dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 is-regex: 1.1.4 - dev: true - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + safer-buffer@2.1.2: {} - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true + semver@6.3.1: {} - /semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} - engines: {node: '>=10'} - hasBin: true - dev: true + semver@7.6.3: {} - /set-function-length@1.2.0: - resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} - engines: {node: '>= 0.4'} + set-function-length@1.2.0: dependencies: define-data-property: 1.1.1 function-bind: 1.1.2 get-intrinsic: 1.2.2 gopd: 1.0.1 has-property-descriptors: 1.0.1 - dev: true - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 @@ -2779,98 +3407,61 @@ packages: get-intrinsic: 1.2.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 - dev: true - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} - engines: {node: '>= 0.4'} + set-function-name@2.0.1: dependencies: define-data-property: 1.1.1 functions-have-names: 1.2.3 has-property-descriptors: 1.0.1 - dev: true - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - dev: true - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true + shebang-regex@3.0.0: {} - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + side-channel@1.0.4: dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 object-inspect: 1.13.1 - dev: true - /side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} + side-channel@1.0.6: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 object-inspect: 1.13.1 - dev: true - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + signal-exit@3.0.7: {} - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true + signal-exit@4.1.0: {} - /slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} + slice-ansi@3.0.0: dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - dev: true - /slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} + slice-ansi@4.0.0: dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - dev: true - /slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} + slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.1 is-fullwidth-code-point: 4.0.0 - dev: true - /slice-ansi@7.1.0: - resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} - engines: {node: '>=18'} + slice-ansi@7.1.0: dependencies: ansi-styles: 6.2.1 is-fullwidth-code-point: 5.0.0 - dev: true - /splaytree-ts@1.0.1: - resolution: {integrity: sha512-B+VzCm33/KEchi/fzT6/3NRHm8k5+Kf37SBQO3meHHS/tK2xBnIm4ZvusQ1wUpHgKMCCqEWgXnwFXAa1nD289g==} - dev: false + splaytree-ts@1.0.1: {} - /sshpk@1.18.0: - resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} - engines: {node: '>=0.10.0'} - hasBin: true + sshpk@1.18.0: dependencies: asn1: 0.2.6 assert-plus: 1.0.0 @@ -2881,169 +3472,90 @@ packages: jsbn: 0.1.1 safer-buffer: 2.1.2 tweetnacl: 0.14.5 - dev: true - /string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - dev: true + string-argv@0.3.2: {} - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true - /string-width@7.1.0: - resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} - engines: {node: '>=18'} + string-width@7.1.0: dependencies: emoji-regex: 10.3.0 get-east-asian-width: 1.2.0 strip-ansi: 7.1.0 - dev: true - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} - engines: {node: '>= 0.4'} + string.prototype.trim@1.2.8: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 - dev: true - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + string.prototype.trimend@1.0.7: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 - dev: true - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + string.prototype.trimstart@1.0.7: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 - dev: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - dev: true - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + strip-ansi@7.1.0: dependencies: ansi-regex: 6.0.1 - dev: true - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true + strip-bom@3.0.0: {} - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true + strip-final-newline@2.0.0: {} - /strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - dev: true + strip-final-newline@3.0.0: {} - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + strip-json-comments@3.1.1: {} - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - dev: true - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 - dev: true - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true + supports-preserve-symlinks-flag@1.0.0: {} - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + text-table@0.2.0: {} - /throttleit@1.0.1: - resolution: {integrity: sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==} - dev: true + throttleit@1.0.1: {} - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true + through@2.3.8: {} - /tldts-core@6.1.63: - resolution: {integrity: sha512-H1XCt54xY+QPbwhTgmxLkepX0MVHu3USfMmejiCOdkMbRcP22Pn2FVF127r/GWXVDmXTRezyF3Ckvhn4Fs6j7Q==} - dev: true + tldts-core@6.1.63: {} - /tldts@6.1.63: - resolution: {integrity: sha512-YWwhsjyn9sB/1rOkSRYxvkN/wl5LFM1QDv6F2pVR+pb/jFne4EOBxHfkKVWvDIBEAw9iGOwwubHtQTm0WRT5sQ==} - hasBin: true + tldts@6.1.63: dependencies: tldts-core: 6.1.63 - dev: true - /tmp@0.2.3: - resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} - engines: {node: '>=14.14'} - dev: true + tmp@0.2.3: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /tough-cookie@5.0.0: - resolution: {integrity: sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==} - engines: {node: '>=16'} + tough-cookie@5.0.0: dependencies: tldts: 6.1.63 - dev: true - /tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - dev: true + tree-kill@1.2.2: {} - /ts-node@10.9.2(@types/node@20.11.10)(typescript@5.3.3): - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true + ts-node@10.9.2(@types/node@20.11.10)(typescript@5.3.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.9 @@ -3060,219 +3572,133 @@ packages: typescript: 5.3.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: true - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 - dev: true - /tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - dev: true + tslib@2.8.1: {} - /tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 - dev: true - /tweetnacl@0.14.5: - resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} - dev: true + tweetnacl@0.14.5: {} - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - dev: true - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true + type-fest@0.20.2: {} - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true + type-fest@0.21.3: {} - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} - engines: {node: '>= 0.4'} + typed-array-buffer@1.0.0: dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 is-typed-array: 1.1.12 - dev: true - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} - engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.0: dependencies: call-bind: 1.0.5 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 - dev: true - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} + typed-array-byte-offset@1.0.0: dependencies: available-typed-arrays: 1.0.5 call-bind: 1.0.5 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 - dev: true - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + typed-array-length@1.0.4: dependencies: call-bind: 1.0.5 for-each: 0.3.3 is-typed-array: 1.1.12 - dev: true - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + typescript@5.3.3: {} - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.5 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - dev: true - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - requiresBuild: true - dev: true + undici-types@5.26.5: {} - /universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - dev: true + universalify@2.0.1: {} - /untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - dev: true + untildify@4.0.0: {} - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: punycode: 2.3.1 - dev: true - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: true + uuid@8.3.2: {} - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true + v8-compile-cache-lib@3.0.1: {} - /verror@1.10.0: - resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} - engines: {'0': node >=0.6.0} + verror@1.10.0: dependencies: assert-plus: 1.0.0 core-util-is: 1.0.2 extsprintf: 1.3.0 - dev: true - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: true - /which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.13: dependencies: available-typed-arrays: 1.0.5 call-bind: 1.0.5 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 - dev: true - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrap-ansi@9.0.0: - resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} - engines: {node: '>=18'} + wrap-ansi@9.0.0: dependencies: ansi-styles: 6.2.1 string-width: 7.1.0 strip-ansi: 7.1.0 - dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true + wrappy@1.0.2: {} - /yaml@2.5.1: - resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} - engines: {node: '>= 14'} - hasBin: true - dev: true + yaml@2.5.1: {} - /yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yauzl@2.10.0: dependencies: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 - dev: true - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true + yn@3.1.1: {} - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yocto-queue@0.1.0: {} diff --git a/src/js/Draw/L.PM.Draw.Circle.js b/src/js/Draw/L.PM.Draw.Circle.js index 0fc9aebb..57942bb2 100644 --- a/src/js/Draw/L.PM.Draw.Circle.js +++ b/src/js/Draw/L.PM.Draw.Circle.js @@ -1,3 +1,4 @@ +import { Circle } from 'leaflet'; import Draw from './L.PM.Draw'; Draw.Circle = Draw.CircleMarker.extend({ @@ -5,7 +6,7 @@ Draw.Circle = Draw.CircleMarker.extend({ this._map = map; this._shape = 'Circle'; this.toolbarButtonName = 'drawCircle'; - this._BaseCircleClass = L.Circle; + this._BaseCircleClass = Circle; this._minRadiusOption = 'minRadiusCircle'; this._maxRadiusOption = 'maxRadiusCircle'; this._editableOption = 'resizeableCircle'; diff --git a/src/js/Draw/L.PM.Draw.CircleMarker.js b/src/js/Draw/L.PM.Draw.CircleMarker.js index 6f1e2237..05f01e42 100644 --- a/src/js/Draw/L.PM.Draw.CircleMarker.js +++ b/src/js/Draw/L.PM.Draw.CircleMarker.js @@ -1,5 +1,6 @@ -import Draw from './L.PM.Draw'; +import { CircleMarker, DivIcon, DomUtil, FeatureGroup, Marker, Point, Util } from 'leaflet'; import { destinationOnLine, getTranslation } from '../helpers'; +import Draw from './L.PM.Draw'; Draw.CircleMarker = Draw.extend({ initialize(map) { @@ -8,7 +9,7 @@ Draw.CircleMarker = Draw.extend({ this.toolbarButtonName = 'drawCircleMarker'; // with _layerIsDragging we check if a circlemarker is currently dragged and disable marker creation this._layerIsDragging = false; - this._BaseCircleClass = L.CircleMarker; + this._BaseCircleClass = CircleMarker; this._minRadiusOption = 'minRadiusCircleMarker'; this._maxRadiusOption = 'maxRadiusCircleMarker'; this._editableOption = 'resizeableCircleMarker'; @@ -17,7 +18,7 @@ Draw.CircleMarker = Draw.extend({ enable(options) { // TODO: Think about if these options could be passed globally for all // instances of L.PM.Draw. So a dev could set drawing style one time as some kind of config - L.Util.setOptions(this, options); + Util.setOptions(this, options); // TODO: remove with next major release if (this.options.editable) { this.options.resizeableCircleMarker = this.options.editable; @@ -37,11 +38,11 @@ Draw.CircleMarker = Draw.extend({ if (this.options[this._editableOption]) { // we need to set the radius to 0 without overwriting the CircleMarker style const templineStyle = {}; - L.extend(templineStyle, this.options.templineStyle); + Object.assign(templineStyle, this.options.templineStyle); templineStyle.radius = 0; // create a new layergroup - this._layerGroup = new L.FeatureGroup(); + this._layerGroup = new FeatureGroup(); this._layerGroup._pmTempLayer = true; this._layerGroup.addTo(this._map); @@ -54,8 +55,8 @@ Draw.CircleMarker = Draw.extend({ this._layer._pmTempLayer = true; // this is the marker in the center of the circle - this._centerMarker = L.marker(this._map.getCenter(), { - icon: L.divIcon({ className: 'marker-icon' }), + this._centerMarker = new Marker(this._map.getCenter(), { + icon: new DivIcon({ className: 'marker-icon' }), draggable: false, zIndexOffset: 100, }); @@ -63,9 +64,9 @@ Draw.CircleMarker = Draw.extend({ this._centerMarker._pmTempLayer = true; // this is the hintmarker on the mouse cursor - this._hintMarker = L.marker(this._map.getCenter(), { + this._hintMarker = new Marker(this._map.getCenter(), { zIndexOffset: 110, - icon: L.divIcon({ className: 'marker-icon cursor-marker' }), + icon: new DivIcon({ className: 'marker-icon cursor-marker' }), }); this._setPane(this._hintMarker, 'vertexPane'); this._hintMarker._pmTempLayer = true; @@ -73,7 +74,7 @@ Draw.CircleMarker = Draw.extend({ // show the hintmarker if the option is set if (this.options.cursorMarker) { - L.DomUtil.addClass(this._hintMarker._icon, 'visible'); + this._hintMarker._icon.classList.add('visible'); } // add tooltip to hintmarker @@ -81,7 +82,7 @@ Draw.CircleMarker = Draw.extend({ this._hintMarker .bindTooltip(getTranslation('tooltips.startCircle'), { permanent: true, - offset: L.point(0, 10), + offset: new Point(0, 10), direction: 'bottom', opacity: 0.8, @@ -90,7 +91,7 @@ Draw.CircleMarker = Draw.extend({ } // this is the hintline from the hint marker to the center marker - this._hintline = L.polyline([], this.options.hintlineStyle); + this._hintline = new Polyline([], this.options.hintlineStyle); this._setPane(this._hintline, 'layerPane'); this._hintline._pmTempLayer = true; this._layerGroup.addLayer(this._hintline); @@ -116,7 +117,7 @@ Draw.CircleMarker = Draw.extend({ this._hintMarker .bindTooltip(getTranslation('tooltips.placeCircleMarker'), { permanent: true, - offset: L.point(0, 10), + offset: new Point(0, 10), direction: 'bottom', opacity: 0.8, @@ -300,8 +301,8 @@ Draw.CircleMarker = Draw.extend({ }, isRelevantMarker(layer) { return ( - layer instanceof L.CircleMarker && - !(layer instanceof L.Circle) && + layer instanceof CircleMarker && + !(layer instanceof Circle) && layer.pm && !layer._pmTempLayer ); @@ -493,7 +494,7 @@ Draw.CircleMarker = Draw.extend({ }, setStyle() { const templineStyle = {}; - L.extend(templineStyle, this.options.templineStyle); + Object.assign(templineStyle, this.options.templineStyle); if (this.options[this._editableOption]) { templineStyle.radius = 0; } diff --git a/src/js/Draw/L.PM.Draw.Cut.js b/src/js/Draw/L.PM.Draw.Cut.js index be2e0df3..401a6bb9 100644 --- a/src/js/Draw/L.PM.Draw.Cut.js +++ b/src/js/Draw/L.PM.Draw.Cut.js @@ -1,14 +1,15 @@ +import booleanContains from '@turf/boolean-contains'; import lineIntersect from '@turf/line-intersect'; import lineSplit from '@turf/line-split'; -import booleanContains from '@turf/boolean-contains'; +import { GeoJSON, LayerGroup, Polygon, Polyline, Util } from 'leaflet'; import get from 'lodash/get'; -import Draw from './L.PM.Draw'; import { difference, flattenPolyline, groupToMultiLineString, intersect, } from '../helpers/turfHelper'; +import Draw from './L.PM.Draw'; Draw.Cut = Draw.Polygon.extend({ initialize(map) { @@ -45,7 +46,7 @@ Draw.Cut = Draw.Polygon.extend({ return; } - const polygonLayer = L.polygon(coords, this.options.pathOptions); + const polygonLayer = new Polygon(coords, this.options.pathOptions); // readout information about the latlngs like snapping points polygonLayer._latlngInfos = this._layer._latlngInfo; this.cut(polygonLayer); @@ -97,7 +98,7 @@ Draw.Cut = Draw.Polygon.extend({ (L.PM.optIn && l.options.pmIgnore === false) // if optIn is true and pmIgnore is false); ) // only polyline instances - .filter((l) => l instanceof L.Polyline) + .filter((l) => l instanceof Polyline) // exclude the drawn one .filter((l) => l !== layer) // layer is allowed to cut @@ -107,7 +108,7 @@ Draw.Cut = Draw.Polygon.extend({ // TODO: after cutting nothing else can be cutted anymore until a new list is passed, because the layers don't exists anymore. Should we remove the cutted layers from the list? if ( this.options.layersToCut && - L.Util.isArray(this.options.layersToCut) && + Util.isArray(this.options.layersToCut) && this.options.layersToCut.length > 0 ) { return this.options.layersToCut.indexOf(l) > -1; @@ -125,13 +126,13 @@ Draw.Cut = Draw.Polygon.extend({ if ( lineInter || - (l instanceof L.Polyline && !(l instanceof L.Polygon)) + (l instanceof Polyline && !(l instanceof Polygon)) ) { return lineInter; } return !!intersect(layer.toGeoJSON(15), l.toGeoJSON(15)); } catch (e) { - if (l instanceof L.Polygon) { + if (l instanceof Polygon) { /* eslint-disable-next-line no-console */ console.error("You can't cut polygons with self-intersections"); } @@ -142,10 +143,10 @@ Draw.Cut = Draw.Polygon.extend({ // loop through all layers that intersect with the drawn (cutting) layer layers.forEach((l) => { let newLayer; - if (l instanceof L.Polygon) { - // Also for L.Rectangle + if (l instanceof Polygon) { + // Also for Rectangle // easiest way to clone the complete latlngs without reference - newLayer = L.polygon(l.getLatLngs()); + newLayer = new Polygon(l.getLatLngs()); const coords = newLayer.getLatLngs(); // snapping points added to the layer, so borders are cutted correct @@ -172,7 +173,7 @@ Draw.Cut = Draw.Polygon.extend({ } }); } else { - // L.Polyline + // Polyline newLayer = l; } @@ -180,7 +181,7 @@ Draw.Cut = Draw.Polygon.extend({ const diff = this._cutLayer(layer, newLayer); // the resulting layer after the cut - let resultLayer = L.geoJSON(diff, l.options); + let resultLayer = new GeoJSON(diff, l.options); if (resultLayer.getLayers().length === 1) { [resultLayer] = resultLayer.getLayers(); // prevent that a unnecessary layergroup is created } @@ -207,7 +208,7 @@ Draw.Cut = Draw.Polygon.extend({ this._map.pm.removeLayer({ target: resultingLayer }); } - if (resultingLayer instanceof L.LayerGroup) { + if (resultingLayer instanceof LayerGroup) { resultingLayer.eachLayer((_layer) => { this._addDrawnLayerProp(_layer); }); @@ -218,7 +219,7 @@ Draw.Cut = Draw.Polygon.extend({ if ( this.options.layersToCut && - L.Util.isArray(this.options.layersToCut) && + Util.isArray(this.options.layersToCut) && this.options.layersToCut.length > 0 ) { const idx = this.options.layersToCut.indexOf(l); @@ -234,10 +235,10 @@ Draw.Cut = Draw.Polygon.extend({ }); }, _cutLayer(layer, l) { - const fg = L.geoJSON(); + const fg = new GeoJSON(); let diff; // cut - if (l instanceof L.Polygon) { + if (l instanceof Polygon) { // find layer difference diff = difference(l.toGeoJSON(15), layer.toGeoJSON(15)); } else { @@ -249,9 +250,9 @@ Draw.Cut = Draw.Polygon.extend({ let group; if (lineDiff && lineDiff.features.length > 0) { - group = L.geoJSON(lineDiff); + group = new GeoJSON(lineDiff); } else { - group = L.geoJSON(feature); + group = new GeoJSON(feature); } group.getLayers().forEach((lay) => { @@ -270,5 +271,5 @@ Draw.Cut = Draw.Polygon.extend({ } return diff; }, - _change: L.Util.falseFn, + _change: Util.falseFn, }); diff --git a/src/js/Draw/L.PM.Draw.Line.js b/src/js/Draw/L.PM.Draw.Line.js index 58b222f1..b61edb8f 100644 --- a/src/js/Draw/L.PM.Draw.Line.js +++ b/src/js/Draw/L.PM.Draw.Line.js @@ -1,6 +1,7 @@ import kinks from '@turf/kinks'; import Draw from './L.PM.Draw'; +import { DivIcon, DomUtil, FeatureGroup, Marker, Point, Polyline, Util } from 'leaflet'; import { getTranslation } from '../helpers'; Draw.Line = Draw.extend({ @@ -11,7 +12,7 @@ Draw.Line = Draw.extend({ this._doesSelfIntersect = false; }, enable(options) { - L.Util.setOptions(this, options); + Util.setOptions(this, options); // enable draw mode this._enabled = true; @@ -19,12 +20,12 @@ Draw.Line = Draw.extend({ this._markers = []; // create a new layergroup - this._layerGroup = new L.FeatureGroup(); + this._layerGroup = new FeatureGroup(); this._layerGroup._pmTempLayer = true; this._layerGroup.addTo(this._map); // this is the polyLine that'll make up the polygon - this._layer = L.polyline([], { + this._layer = new Polyline([], { ...this.options.templineStyle, pmIgnore: false, }); @@ -33,16 +34,16 @@ Draw.Line = Draw.extend({ this._layerGroup.addLayer(this._layer); // this is the hintline from the mouse cursor to the last marker - this._hintline = L.polyline([], this.options.hintlineStyle); + this._hintline = new Polyline([], this.options.hintlineStyle); this._setPane(this._hintline, 'layerPane'); this._hintline._pmTempLayer = true; this._layerGroup.addLayer(this._hintline); // this is the hintmarker on the mouse cursor - this._hintMarker = L.marker(this._map.getCenter(), { + this._hintMarker = new Marker(this._map.getCenter(), { interactive: false, // always vertex marker below will be triggered from the click event -> _finishShape #911 zIndexOffset: 100, - icon: L.divIcon({ className: 'marker-icon cursor-marker' }), + icon: new DivIcon({ className: 'marker-icon cursor-marker' }), }); this._setPane(this._hintMarker, 'vertexPane'); this._hintMarker._pmTempLayer = true; @@ -50,7 +51,7 @@ Draw.Line = Draw.extend({ // show the hintmarker if the option is set if (this.options.cursorMarker) { - L.DomUtil.addClass(this._hintMarker._icon, 'visible'); + this._hintMarker._icon.classList.add('visible'); } // add tooltip to hintmarker @@ -58,7 +59,7 @@ Draw.Line = Draw.extend({ this._hintMarker .bindTooltip(getTranslation('tooltips.firstVertex'), { permanent: true, - offset: L.point(0, 10), + offset: new Point(0, 10), direction: 'bottom', opacity: 0.8, @@ -201,7 +202,7 @@ Draw.Line = Draw.extend({ // intersection on the clone. Phew... - let's do it 💪 // clone layer (polyline is enough, even when it's a polygon) - const clone = L.polyline(this._layer.getLatLngs()); + const clone = new Polyline(this._layer.getLatLngs()); if (addVertex) { // get vertex from param or from hintmarker @@ -365,7 +366,7 @@ Draw.Line = Draw.extend({ } // create the leaflet shape and add it to the map - const polylineLayer = L.polyline(coords, this.options.pathOptions); + const polylineLayer = new Polyline(coords, this.options.pathOptions); this._setPane(polylineLayer, 'layerPane'); this._finishLayer(polylineLayer); polylineLayer.addTo(this._map.pm._getContainingLayer()); @@ -388,9 +389,9 @@ Draw.Line = Draw.extend({ }, _createMarker(latlng) { // create the new marker - const marker = new L.Marker(latlng, { + const marker = new Marker(latlng, { draggable: false, - icon: L.divIcon({ className: 'marker-icon' }), + icon: new DivIcon({ className: 'marker-icon' }), }); this._setPane(marker, 'vertexPane'); marker._pmTempLayer = true; diff --git a/src/js/Draw/L.PM.Draw.Marker.js b/src/js/Draw/L.PM.Draw.Marker.js index a7fa658d..b077541d 100644 --- a/src/js/Draw/L.PM.Draw.Marker.js +++ b/src/js/Draw/L.PM.Draw.Marker.js @@ -1,5 +1,6 @@ -import Draw from './L.PM.Draw'; +import { Marker, Point, Util } from 'leaflet'; import { getTranslation } from '../helpers'; +import Draw from './L.PM.Draw'; Draw.Marker = Draw.extend({ initialize(map) { @@ -12,7 +13,7 @@ Draw.Marker = Draw.extend({ enable(options) { // TODO: Think about if these options could be passed globally for all // instances of L.PM.Draw. So a dev could set drawing style one time as some kind of config - L.Util.setOptions(this, options); + Util.setOptions(this, options); // change enabled state this._enabled = true; @@ -27,7 +28,7 @@ Draw.Marker = Draw.extend({ this._map.pm.Toolbar.toggleButton(this.toolbarButtonName, true); // this is the hintmarker on the mouse cursor - this._hintMarker = L.marker( + this._hintMarker = new Marker( this._map.getCenter(), this.options.markerStyle ); @@ -40,7 +41,7 @@ Draw.Marker = Draw.extend({ this._hintMarker .bindTooltip(getTranslation('tooltips.placeMarker'), { permanent: true, - offset: L.point(0, 10), + offset: new Point(0, 10), direction: 'bottom', opacity: 0.8, @@ -119,7 +120,7 @@ Draw.Marker = Draw.extend({ }, isRelevantMarker(layer) { return ( - layer instanceof L.Marker && + layer instanceof Marker && layer.pm && !layer._pmTempLayer && !layer.pm._initTextMarker @@ -162,7 +163,7 @@ Draw.Marker = Draw.extend({ const latlng = this._hintMarker.getLatLng(); // create marker - const marker = new L.Marker(latlng, this.options.markerStyle); + const marker = new Marker(latlng, this.options.markerStyle); this._setPane(marker, 'markerPane'); this._finishLayer(marker); diff --git a/src/js/Draw/L.PM.Draw.Polygon.js b/src/js/Draw/L.PM.Draw.Polygon.js index 57394dfd..b9962ec6 100644 --- a/src/js/Draw/L.PM.Draw.Polygon.js +++ b/src/js/Draw/L.PM.Draw.Polygon.js @@ -1,5 +1,6 @@ -import Draw from './L.PM.Draw'; +import { DivIcon, Marker, Polygon } from 'leaflet'; import { getTranslation } from '../helpers'; +import Draw from './L.PM.Draw'; Draw.Polygon = Draw.Line.extend({ initialize(map) { @@ -14,9 +15,9 @@ Draw.Polygon = Draw.Line.extend({ }, _createMarker(latlng) { // create the new marker - const marker = new L.Marker(latlng, { + const marker = new Marker(latlng, { draggable: false, - icon: L.divIcon({ className: 'marker-icon' }), + icon: new DivIcon({ className: 'marker-icon' }), }); this._setPane(marker, 'vertexPane'); @@ -86,7 +87,7 @@ Draw.Polygon = Draw.Line.extend({ return; } - const polygonLayer = L.polygon(coords, this.options.pathOptions); + const polygonLayer = new Polygon(coords, this.options.pathOptions); this._setPane(polygonLayer, 'layerPane'); this._finishLayer(polygonLayer); polygonLayer.addTo(this._map.pm._getContainingLayer()); diff --git a/src/js/Draw/L.PM.Draw.Rectangle.js b/src/js/Draw/L.PM.Draw.Rectangle.js index 39be6706..f5e958cf 100644 --- a/src/js/Draw/L.PM.Draw.Rectangle.js +++ b/src/js/Draw/L.PM.Draw.Rectangle.js @@ -1,5 +1,6 @@ -import Draw from './L.PM.Draw'; +import { DivIcon, DomUtil, FeatureGroup, Marker, Point, Rectangle, Util } from 'leaflet'; import { fixLatOffset, getTranslation } from '../helpers'; +import Draw from './L.PM.Draw'; Draw.Rectangle = Draw.extend({ initialize(map) { @@ -10,18 +11,18 @@ Draw.Rectangle = Draw.extend({ enable(options) { // TODO: Think about if these options could be passed globally for all // instances of L.PM.Draw. So a dev could set drawing style one time as some kind of config - L.Util.setOptions(this, options); + Util.setOptions(this, options); // enable draw mode this._enabled = true; // create a new layergroup - this._layerGroup = new L.FeatureGroup(); + this._layerGroup = new FeatureGroup(); this._layerGroup._pmTempLayer = true; this._layerGroup.addTo(this._map); // the rectangle we want to draw - this._layer = L.rectangle( + this._layer = new Rectangle( [ [0, 0], [0, 0], @@ -33,8 +34,8 @@ Draw.Rectangle = Draw.extend({ // this is the marker at the origin of the rectangle // this needs to be present, for tracking purposes, but we'll make it invisible if a user doesn't want to see it! - this._startMarker = L.marker(this._map.getCenter(), { - icon: L.divIcon({ className: 'marker-icon rect-start-marker' }), + this._startMarker = new Marker(this._map.getCenter(), { + icon: new DivIcon({ className: 'marker-icon rect-start-marker' }), draggable: false, zIndexOffset: -100, opacity: this.options.cursorMarker ? 1 : 0, @@ -44,9 +45,9 @@ Draw.Rectangle = Draw.extend({ this._layerGroup.addLayer(this._startMarker); // this is the hintmarker on the mouse cursor - this._hintMarker = L.marker(this._map.getCenter(), { + this._hintMarker = new Marker(this._map.getCenter(), { zIndexOffset: 150, - icon: L.divIcon({ className: 'marker-icon cursor-marker' }), + icon: new DivIcon({ className: 'marker-icon cursor-marker' }), }); this._setPane(this._hintMarker, 'vertexPane'); this._hintMarker._pmTempLayer = true; @@ -54,7 +55,7 @@ Draw.Rectangle = Draw.extend({ // show the hintmarker if the option is set if (this.options.cursorMarker) { - L.DomUtil.addClass(this._hintMarker._icon, 'visible'); + this._hintMarker._icon.classList.add('visible'); } // add tooltip to hintmarker @@ -62,7 +63,7 @@ Draw.Rectangle = Draw.extend({ this._hintMarker .bindTooltip(getTranslation('tooltips.firstVertex'), { permanent: true, - offset: L.point(0, 10), + offset: new Point(0, 10), direction: 'bottom', opacity: 0.8, @@ -74,8 +75,8 @@ Draw.Rectangle = Draw.extend({ // Add two more matching style markers, if cursor marker is rendered this._styleMarkers = []; for (let i = 0; i < 2; i += 1) { - const styleMarker = L.marker(this._map.getCenter(), { - icon: L.divIcon({ + const styleMarker = new Marker(this._map.getCenter(), { + icon: new DivIcon({ className: 'marker-icon rect-style-marker', }), draggable: false, @@ -162,13 +163,13 @@ Draw.Rectangle = Draw.extend({ const latlng = this._hintMarker.getLatLng(); // show and place start marker - L.DomUtil.addClass(this._startMarker._icon, 'visible'); + this._startMarker._icon.classList.add('visible'); this._startMarker.setLatLng(latlng); // if we have the other two visibilty markers, show and place them now if (this.options.cursorMarker && this._styleMarkers) { this._styleMarkers.forEach((styleMarker) => { - L.DomUtil.addClass(styleMarker._icon, 'visible'); + styleMarker._icon.classList.add('visible'); styleMarker.setLatLng(latlng); }); } @@ -281,7 +282,7 @@ Draw.Rectangle = Draw.extend({ } // create the final rectangle layer, based on opposite corners A & B - const rectangleLayer = L.rectangle([A, B], this.options.pathOptions); + const rectangleLayer = new Rectangle([A, B], this.options.pathOptions); // rectangle can only initialized with bounds (not working with rotation) so we update the latlngs if (this.options.rectangleAngle) { diff --git a/src/js/Draw/L.PM.Draw.Text.js b/src/js/Draw/L.PM.Draw.Text.js index c141c367..b8d5bc3e 100644 --- a/src/js/Draw/L.PM.Draw.Text.js +++ b/src/js/Draw/L.PM.Draw.Text.js @@ -1,5 +1,6 @@ -import Draw from './L.PM.Draw'; +import { DivIcon, DomUtil, Marker, Point, Util } from 'leaflet'; import { getTranslation } from '../helpers'; +import Draw from './L.PM.Draw'; Draw.Text = Draw.extend({ initialize(map) { @@ -10,7 +11,7 @@ Draw.Text = Draw.extend({ enable(options) { // TODO: Think about if these options could be passed globally for all // instances of L.PM.Draw. So a dev could set drawing style one time as some kind of config - L.Util.setOptions(this, options); + Util.setOptions(this, options); // change enabled state this._enabled = true; @@ -22,10 +23,10 @@ Draw.Text = Draw.extend({ this._map.pm.Toolbar.toggleButton(this.toolbarButtonName, true); // this is the hintmarker on the mouse cursor - this._hintMarker = L.marker(this._map.getCenter(), { + this._hintMarker = new Marker(this._map.getCenter(), { interactive: false, zIndexOffset: 100, - icon: L.divIcon({ className: 'marker-icon cursor-marker' }), + icon: new DivIcon({ className: 'marker-icon cursor-marker' }), }); this._setPane(this._hintMarker, 'vertexPane'); this._hintMarker._pmTempLayer = true; @@ -33,7 +34,7 @@ Draw.Text = Draw.extend({ // show the hintmarker if the option is set if (this.options.cursorMarker) { - L.DomUtil.addClass(this._hintMarker._icon, 'visible'); + this._hintMarker._icon.classList.add('visible'); } // add tooltip to hintmarker @@ -41,7 +42,7 @@ Draw.Text = Draw.extend({ this._hintMarker .bindTooltip(getTranslation('tooltips.placeText'), { permanent: true, - offset: L.point(0, 10), + offset: new Point(0, 10), direction: 'bottom', opacity: 0.8, @@ -148,7 +149,7 @@ Draw.Text = Draw.extend({ const textAreaIcon = this._createTextIcon(this.textArea); - const marker = new L.Marker(latlng, { + const marker = new Marker(latlng, { textMarker: true, _textMarkerOverPM: true, // we need to put this into the options, else we can't catch this in the init method icon: textAreaIcon, @@ -164,7 +165,7 @@ Draw.Text = Draw.extend({ marker.addTo(this._map.pm._getContainingLayer()); if (marker.pm) { marker.pm.textArea = this.textArea; - L.setOptions(marker.pm, { + Util.setOptions(marker.pm, { removeIfEmpty: this.options.textOptions?.removeIfEmpty ?? true, }); @@ -201,7 +202,7 @@ Draw.Text = Draw.extend({ }, _createTextIcon(textArea) { - return L.divIcon({ + return new DivIcon({ className: 'pm-text-marker', html: textArea, }); diff --git a/src/js/Draw/L.PM.Draw.js b/src/js/Draw/L.PM.Draw.js index b8950d8a..f28140c1 100644 --- a/src/js/Draw/L.PM.Draw.js +++ b/src/js/Draw/L.PM.Draw.js @@ -1,8 +1,9 @@ +import { Circle, CircleMarker, Class, Icon, ImageOverlay, Marker, Polyline, Util } from 'leaflet'; import merge from 'lodash/merge'; -import SnapMixin from '../Mixins/Snapping'; import EventMixin from '../Mixins/Events'; +import SnapMixin from '../Mixins/Snapping'; -const Draw = L.Class.extend({ +const Draw = Class.extend({ includes: [SnapMixin, EventMixin], options: { snappable: true, // TODO: next major Release, rename it to allowSnapping @@ -20,7 +21,7 @@ const Draw = L.Class.extend({ finishOn: null, markerStyle: { draggable: true, - icon: L.icon(), + icon: new Icon(), }, hideMiddleMarkers: false, minRadiusCircle: null, @@ -43,7 +44,7 @@ const Draw = L.Class.extend({ snapVertex: true, }, setOptions(options) { - L.Util.setOptions(this, options); + Util.setOptions(this, options); this.setStyle(this.options); }, setStyle() {}, @@ -53,7 +54,7 @@ const Draw = L.Class.extend({ initialize(map) { // Overwriting the default tooltipAnchor of the default Marker Icon, because the tooltip functionality was updated but not the anchor in the Icon // Issue https://github.com/Leaflet/Leaflet/issues/7302 - Leaflet v1.7.1 - const defaultIcon = new L.Icon.Default(); + const defaultIcon = new Icon.Default(); defaultIcon.options.tooltipAnchor = [0, 0]; this.options.markerStyle.icon = defaultIcon; @@ -146,11 +147,11 @@ const Draw = L.Class.extend({ const layers = []; this._map.eachLayer((layer) => { if ( - layer instanceof L.Polyline || - layer instanceof L.Marker || - layer instanceof L.Circle || - layer instanceof L.CircleMarker || - layer instanceof L.ImageOverlay + layer instanceof Polyline || + layer instanceof Marker || + layer instanceof Circle || + layer instanceof CircleMarker || + layer instanceof ImageOverlay ) { // filter out everything that's leaflet-geoman specific temporary stuff if (!layer._pmTempLayer) { diff --git a/src/js/Edit/L.PM.Edit.Circle.js b/src/js/Edit/L.PM.Edit.Circle.js index 91dafc38..3b9cdc5f 100644 --- a/src/js/Edit/L.PM.Edit.Circle.js +++ b/src/js/Edit/L.PM.Edit.Circle.js @@ -1,3 +1,4 @@ +import { DomUtil } from 'leaflet'; import Edit from './L.PM.Edit'; Edit.Circle = Edit.CircleMarker.extend({ @@ -24,7 +25,7 @@ Edit.Circle = Edit.CircleMarker.extend({ const el = this._layer._path ? this._layer._path : this._layer._renderer._container; - L.DomUtil.removeClass(el, 'leaflet-pm-draggable'); + el.classList.remove('leaflet-pm-draggable'); }, _extendingApplyOptions() {}, _syncMarkers() {}, diff --git a/src/js/Edit/L.PM.Edit.CircleMarker.js b/src/js/Edit/L.PM.Edit.CircleMarker.js index 9c17a251..578e9498 100644 --- a/src/js/Edit/L.PM.Edit.CircleMarker.js +++ b/src/js/Edit/L.PM.Edit.CircleMarker.js @@ -1,5 +1,6 @@ -import Edit from './L.PM.Edit'; +import { Circle, DivIcon, DomUtil, FeatureGroup, Marker, Point, Polyline, Util } from 'leaflet'; import { destinationOnLine } from '../helpers'; +import Edit from './L.PM.Edit'; Edit.CircleMarker = Edit.extend({ _shape: 'CircleMarker', @@ -16,7 +17,7 @@ Edit.CircleMarker = Edit.extend({ }, // TODO: remove default option in next major Release enable(options = { draggable: true, snappable: true }) { - L.Util.setOptions(this, options); + Util.setOptions(this, options); // TODO: remove with next major release if (this.options.editable) { this.options.resizeableCircleMarker = this.options.editable; @@ -166,7 +167,7 @@ Edit.CircleMarker = Edit.extend({ } // add markerGroup to map, markerGroup includes regular and middle markers - this._helperLayers = new L.FeatureGroup(); + this._helperLayers = new FeatureGroup(); this._helperLayers._pmTempLayer = true; this._helperLayers.addTo(map); @@ -183,13 +184,13 @@ Edit.CircleMarker = Edit.extend({ }, _getLatLngOnCircle(center, radius) { const pointA = this._map.project(center); - const pointB = L.point(pointA.x + radius, pointA.y); + const pointB = new Point(pointA.x + radius, pointA.y); return this._map.unproject(pointB); }, _createHintLine(markerA, markerB) { const A = markerA.getLatLng(); const B = markerB.getLatLng(); - this._hintline = L.polyline([A, B], this.options.hintlineStyle); + this._hintline = new Polyline([A, B], this.options.hintlineStyle); this._setPane(this._hintline, 'layerPane'); this._hintline._pmTempLayer = true; this._helperLayers.addLayer(this._hintline); @@ -197,7 +198,7 @@ Edit.CircleMarker = Edit.extend({ _createCenterMarker(latlng) { const marker = this._createMarker(latlng); if (this.options.draggable) { - L.DomUtil.addClass(marker._icon, 'leaflet-pm-draggable'); + marker._icon.classList.add('leaflet-pm-draggable'); marker.on('move', this._moveCircle, this); } else { marker.dragging.disable(); @@ -210,9 +211,9 @@ Edit.CircleMarker = Edit.extend({ return marker; }, _createMarker(latlng) { - const marker = new L.Marker(latlng, { + const marker = new Marker(latlng, { draggable: true, - icon: L.divIcon({ className: 'marker-icon' }), + icon: new DivIcon({ className: 'marker-icon' }), }); this._setPane(marker, 'vertexPane'); @@ -316,7 +317,7 @@ Edit.CircleMarker = Edit.extend({ // dragged marker const draggedMarker = e.target; if ( - draggedMarker instanceof L.Marker && + draggedMarker instanceof Marker && !this._vertexValidationDrag(draggedMarker) ) { return; @@ -374,7 +375,7 @@ Edit.CircleMarker = Edit.extend({ map, this._layer.getLatLng() ); - const _layer = L.circle(this._layer.getLatLng(), this._layer.options); + const _layer = new Circle(this._layer.getLatLng(), this._layer.options); _layer.setRadius(radius); const crsSimple = map && map.pm._isCRSSimple(); diff --git a/src/js/Edit/L.PM.Edit.ImageOverlay.js b/src/js/Edit/L.PM.Edit.ImageOverlay.js index 387c2ab3..fb612ced 100644 --- a/src/js/Edit/L.PM.Edit.ImageOverlay.js +++ b/src/js/Edit/L.PM.Edit.ImageOverlay.js @@ -1,3 +1,4 @@ +import { Util } from 'leaflet'; import Edit from './L.PM.Edit'; Edit.ImageOverlay = Edit.extend({ @@ -18,7 +19,7 @@ Edit.ImageOverlay = Edit.extend({ }, // TODO: remove default option in next major Release enable(options = { draggable: true, snappable: true }) { - L.Util.setOptions(this, options); + Util.setOptions(this, options); this._map = this._layer._map; // cancel when map isn't available, this happens when the polygon is removed before this fires if (!this._map) { diff --git a/src/js/Edit/L.PM.Edit.LayerGroup.js b/src/js/Edit/L.PM.Edit.LayerGroup.js index 5ea2f0ef..7aec77ae 100644 --- a/src/js/Edit/L.PM.Edit.LayerGroup.js +++ b/src/js/Edit/L.PM.Edit.LayerGroup.js @@ -1,9 +1,10 @@ +import { Class, LayerGroup, Util } from 'leaflet'; import Edit from './L.PM.Edit'; // LayerGroup doesn't inherit from L.PM.Edit because it's just calling L.PM.Edit.Polygon // (which inherits from L.PM.Edit) for each layer, // so it's not really a parent class -Edit.LayerGroup = L.Class.extend({ +Edit.LayerGroup = Class.extend({ initialize(layerGroup) { this._layerGroup = layerGroup; this._layers = this.getLayers(); @@ -44,7 +45,7 @@ Edit.LayerGroup = L.Class.extend({ }; this._layerGroup.on( 'layeradd', - L.Util.throttle(addThrottle, 100, this), + Util.throttle(addThrottle, 100, this), this ); @@ -67,7 +68,7 @@ Edit.LayerGroup = L.Class.extend({ // we run this as throttle because the findLayers() is a larger function this._layerGroup.on( 'layerremove', - L.Util.throttle(removeThrottle, 100, this), + Util.throttle(removeThrottle, 100, this), this ); }, @@ -77,7 +78,7 @@ Edit.LayerGroup = L.Class.extend({ } this._options = options; this._layers.forEach((layer) => { - if (layer instanceof L.LayerGroup) { + if (layer instanceof LayerGroup) { if (_layerIds.indexOf(layer._leaflet_id) === -1) { _layerIds.push(layer._leaflet_id); layer.pm.enable(options, _layerIds); @@ -92,7 +93,7 @@ Edit.LayerGroup = L.Class.extend({ this._layers = this.getLayers(); } this._layers.forEach((layer) => { - if (layer instanceof L.LayerGroup) { + if (layer instanceof LayerGroup) { if (_layerIds.indexOf(layer._leaflet_id) === -1) { _layerIds.push(layer._leaflet_id); layer.pm.disable(_layerIds); @@ -107,7 +108,7 @@ Edit.LayerGroup = L.Class.extend({ this._layers = this.getLayers(); } const enabled = this._layers.find((layer) => { - if (layer instanceof L.LayerGroup) { + if (layer instanceof LayerGroup) { if (_layerIds.indexOf(layer._leaflet_id) === -1) { _layerIds.push(layer._leaflet_id); return layer.pm.enabled(_layerIds); @@ -124,7 +125,7 @@ Edit.LayerGroup = L.Class.extend({ } this._options = options; this._layers.forEach((layer) => { - if (layer instanceof L.LayerGroup) { + if (layer instanceof LayerGroup) { if (_layerIds.indexOf(layer._leaflet_id) === -1) { _layerIds.push(layer._leaflet_id); layer.pm.toggleEdit(options, _layerIds); @@ -136,7 +137,7 @@ Edit.LayerGroup = L.Class.extend({ }, _initLayer(layer) { // add reference for the group to each layer inside said group by id, a layer can have multiple groups - const id = L.Util.stamp(this._layerGroup); + const id = Util.stamp(this._layerGroup); if (!layer.pm._parentLayerGroup) { layer.pm._parentLayerGroup = {}; } @@ -144,7 +145,7 @@ Edit.LayerGroup = L.Class.extend({ }, _removeLayerFromGroup(layer) { if (layer.pm && layer.pm._layerGroup) { - const id = L.Util.stamp(this._layerGroup); + const id = Util.stamp(this._layerGroup); delete layer.pm._layerGroup[id]; } }, @@ -173,7 +174,7 @@ Edit.LayerGroup = L.Class.extend({ // get the layers of LayerGroup children this._layerGroup.getLayers().forEach((layer) => { layers.push(layer); - if (layer instanceof L.LayerGroup) { + if (layer instanceof LayerGroup) { if (_layerIds.indexOf(layer._leaflet_id) === -1) { _layerIds.push(layer._leaflet_id); layers = layers.concat( @@ -188,7 +189,7 @@ Edit.LayerGroup = L.Class.extend({ } if (filterGroupsOut) { - layers = layers.filter((layer) => !(layer instanceof L.LayerGroup)); + layers = layers.filter((layer) => !(layer instanceof LayerGroup)); } if (filterGeoman) { // filter out layers that don't have leaflet-geoman @@ -211,7 +212,7 @@ Edit.LayerGroup = L.Class.extend({ this.options = options; this._layers.forEach((layer) => { if (layer.pm) { - if (layer instanceof L.LayerGroup) { + if (layer instanceof LayerGroup) { if (_layerIds.indexOf(layer._leaflet_id) === -1) { _layerIds.push(layer._leaflet_id); layer.pm.setOptions(options, _layerIds); diff --git a/src/js/Edit/L.PM.Edit.Line.js b/src/js/Edit/L.PM.Edit.Line.js index 95089f0c..59c1f909 100644 --- a/src/js/Edit/L.PM.Edit.Line.js +++ b/src/js/Edit/L.PM.Edit.Line.js @@ -1,9 +1,10 @@ import kinks from '@turf/kinks'; import lineIntersect from '@turf/line-intersect'; import get from 'lodash/get'; -import Edit from './L.PM.Edit'; import { copyLatLngs, hasValues, removeEmptyCoordRings } from '../helpers'; +import Edit from './L.PM.Edit'; +import { DivIcon, DomUtil, FeatureGroup, Marker, Polygon, Polyline, Util } from 'leaflet'; import MarkerLimits from '../Mixins/MarkerLimits'; // Shit's getting complicated in here with Multipolygon Support. So here's a quick note about it: @@ -22,7 +23,7 @@ Edit.Line = Edit.extend({ this._enabled = false; }, enable(options) { - L.Util.setOptions(this, options); + Util.setOptions(this, options); this._map = this._layer._map; @@ -104,7 +105,7 @@ Edit.Line = Edit.extend({ const el = this._layer._path ? this._layer._path : this._layer._renderer._container; - L.DomUtil.removeClass(el, 'leaflet-pm-draggable'); + el.classList.remove('leaflet-pm-draggable'); if (this._layerEdited) { this._fireUpdate(); @@ -141,7 +142,7 @@ Edit.Line = Edit.extend({ } // add markerGroup to map, markerGroup includes regular and middle markers - this._markerGroup = new L.FeatureGroup(); + this._markerGroup = new FeatureGroup(); this._markerGroup._pmTempLayer = true; // handle coord-rings (outer, inner, etc) @@ -181,9 +182,9 @@ Edit.Line = Edit.extend({ // creates initial markers for coordinates _createMarker(latlng) { - const marker = new L.Marker(latlng, { + const marker = new Marker(latlng, { draggable: true, - icon: L.divIcon({ className: 'marker-icon' }), + icon: new DivIcon({ className: 'marker-icon' }), }); this._setPane(marker, 'vertexPane'); @@ -223,7 +224,7 @@ Edit.Line = Edit.extend({ ); const middleMarker = this._createMarker(latlng); - const middleIcon = L.divIcon({ + const middleIcon = new DivIcon({ className: 'marker-icon marker-icon-middle', }); middleMarker.setIcon(middleIcon); @@ -248,7 +249,7 @@ Edit.Line = Edit.extend({ // TODO: move the next two lines inside _addMarker() as soon as // https://github.com/Leaflet/Leaflet/issues/4484 // is fixed - const icon = L.divIcon({ className: 'marker-icon' }); + const icon = new DivIcon({ className: 'marker-icon' }); middleMarker.setIcon(icon); this._addMarker(middleMarker, middleMarker.leftM, middleMarker.rightM); }, @@ -277,7 +278,7 @@ Edit.Line = Edit.extend({ if (!this._vertexValidationDragEnd(middleMarker)) { return; } - const icon = L.divIcon({ className: 'marker-icon' }); + const icon = new DivIcon({ className: 'marker-icon' }); middleMarker.setIcon(icon); // timeout is needed else this._onVertexClick fires the event because it is called after deleting the flag setTimeout(() => { @@ -429,9 +430,9 @@ Edit.Line = Edit.extend({ this._updateDisabledMarkerStyle(marker, disabled); } else if (marker._icon) { if (disabled && !this._checkMarkerAllowedToDrag(marker)) { - L.DomUtil.addClass(marker._icon, 'vertexmarker-disabled'); + marker._icon.classList.add('vertexmarker-disabled'); } else { - L.DomUtil.removeClass(marker._icon, 'vertexmarker-disabled'); + marker._icon.classList.remove('vertexmarker-disabled'); } } }); @@ -476,7 +477,7 @@ Edit.Line = Edit.extend({ // define whether marker is part of hole const isHole = - parentPath[parentPath.length - 1] > 0 && this._layer instanceof L.Polygon; + parentPath[parentPath.length - 1] > 0 && this._layer instanceof Polygon; // prevent removal of the layer if the vertex count is below minimum when not a hole if (!this.options.removeLayerBelowMinVertexCount && !isHole) { @@ -635,8 +636,8 @@ Edit.Line = Edit.extend({ _checkMarkerAllowedToDrag(marker) { const { prevMarker, nextMarker } = this._getNeighborMarkers(marker); - const prevLine = L.polyline([prevMarker.getLatLng(), marker.getLatLng()]); - const nextLine = L.polyline([marker.getLatLng(), nextMarker.getLatLng()]); + const prevLine = new Polyline([prevMarker.getLatLng(), marker.getLatLng()]); + const nextLine = new Polyline([marker.getLatLng(), nextMarker.getLatLng()]); let prevLineIntersectionLen = lineIntersect( this._layer.toGeoJSON(15), diff --git a/src/js/Edit/L.PM.Edit.Marker.js b/src/js/Edit/L.PM.Edit.Marker.js index 73bf2ca6..021f7193 100644 --- a/src/js/Edit/L.PM.Edit.Marker.js +++ b/src/js/Edit/L.PM.Edit.Marker.js @@ -1,3 +1,4 @@ +import { Util } from 'leaflet'; import Edit from './L.PM.Edit'; Edit.Marker = Edit.extend({ @@ -12,7 +13,7 @@ Edit.Marker = Edit.extend({ }, // TODO: remove default option in next major Release enable(options = { draggable: true }) { - L.Util.setOptions(this, options); + Util.setOptions(this, options); // layer is not allowed to edit if (!this.options.allowEditing || !this._layer._map) { diff --git a/src/js/Edit/L.PM.Edit.Polygon.js b/src/js/Edit/L.PM.Edit.Polygon.js index 1cd54b1d..7182a330 100644 --- a/src/js/Edit/L.PM.Edit.Polygon.js +++ b/src/js/Edit/L.PM.Edit.Polygon.js @@ -1,4 +1,5 @@ import lineIntersect from '@turf/line-intersect'; +import { Polyline } from 'leaflet'; import Edit from './L.PM.Edit'; Edit.Polygon = Edit.Line.extend({ @@ -6,8 +7,8 @@ Edit.Polygon = Edit.Line.extend({ _checkMarkerAllowedToDrag(marker) { const { prevMarker, nextMarker } = this._getNeighborMarkers(marker); - const prevLine = L.polyline([prevMarker.getLatLng(), marker.getLatLng()]); - const nextLine = L.polyline([marker.getLatLng(), nextMarker.getLatLng()]); + const prevLine = new Polyline([prevMarker.getLatLng(), marker.getLatLng()]); + const nextLine = new Polyline([marker.getLatLng(), nextMarker.getLatLng()]); const prevLineIntersectionLen = lineIntersect( this._layer.toGeoJSON(15), diff --git a/src/js/Edit/L.PM.Edit.Rectangle.js b/src/js/Edit/L.PM.Edit.Rectangle.js index 64f505f9..a20a8bcd 100644 --- a/src/js/Edit/L.PM.Edit.Rectangle.js +++ b/src/js/Edit/L.PM.Edit.Rectangle.js @@ -1,7 +1,8 @@ // Corner detection based on Leaflet Draw's Edit.Rectangle.js Class: // https://github.com/Leaflet/Leaflet.draw/blob/master/src/edit/handler/Edit.Rectangle.js -import Edit from './L.PM.Edit'; +import { DivIcon, FeatureGroup, Marker, Util } from 'leaflet'; import { calcAngle } from '../helpers'; +import Edit from './L.PM.Edit'; Edit.Rectangle = Edit.Polygon.extend({ _shape: 'Rectangle', @@ -16,7 +17,7 @@ Edit.Rectangle = Edit.Polygon.extend({ } // add markerGroup to map, markerGroup includes regular and middle markers - this._markerGroup = new L.FeatureGroup(); + this._markerGroup = new FeatureGroup(); this._markerGroup._pmTempLayer = true; map.addLayer(this._markerGroup); @@ -48,9 +49,9 @@ Edit.Rectangle = Edit.Polygon.extend({ // creates initial markers for coordinates _createMarker(latlng, index) { - const marker = new L.Marker(latlng, { + const marker = new Marker(latlng, { draggable: true, - icon: L.divIcon({ className: 'marker-icon' }), + icon: new DivIcon({ className: 'marker-icon' }), }); this._setPane(marker, 'vertexPane'); @@ -160,7 +161,7 @@ Edit.Rectangle = Edit.Polygon.extend({ // params: movedMarker -- the Marker object _adjustRectangleForMarkerMove(movedMarker) { // update moved marker coordinates - L.extend(movedMarker._origLatLng, movedMarker._latlng); + Util.extend(movedMarker._origLatLng, movedMarker._latlng); // update rectangle boundaries, based on moved marker's new LatLng and cached opposite corner's LatLng const corners = L.PM.Utils._getRotatedRectangle( diff --git a/src/js/Edit/L.PM.Edit.Text.js b/src/js/Edit/L.PM.Edit.Text.js index 6c995e76..eb23696f 100644 --- a/src/js/Edit/L.PM.Edit.Text.js +++ b/src/js/Edit/L.PM.Edit.Text.js @@ -1,3 +1,4 @@ +import { DomEvent, DomUtil, Util } from 'leaflet'; import Edit from './L.PM.Edit'; Edit.Text = Edit.extend({ @@ -7,7 +8,7 @@ Edit.Text = Edit.extend({ this._enabled = false; }, enable(options) { - L.Util.setOptions(this, options); + Util.setOptions(this, options); if (!this.textArea) { return; @@ -34,12 +35,12 @@ Edit.Text = Edit.extend({ // if shape gets removed from map, disable edit mode this._layer.on('remove', this.disable, this); - L.DomEvent.on(this.textArea, 'input', this._autoResize, this); - L.DomEvent.on(this.textArea, 'focus', this._focusChange, this); - L.DomEvent.on(this.textArea, 'blur', this._focusChange, this); - this._layer.on('dblclick', L.DomEvent.stop); + DomEvent.on(this.textArea, 'input', this._autoResize, this); + DomEvent.on(this.textArea, 'focus', this._focusChange, this); + DomEvent.on(this.textArea, 'blur', this._focusChange, this); + this._layer.on('dblclick', DomEvent.stop); - L.DomEvent.off(this.textArea, 'mousedown', this._preventTextSelection); + DomEvent.off(this.textArea, 'mousedown', this._preventTextSelection); this._enabled = true; @@ -53,9 +54,9 @@ Edit.Text = Edit.extend({ // remove listener this._layer.off('remove', this.disable, this); - L.DomEvent.off(this.textArea, 'input', this._autoResize, this); - L.DomEvent.off(this.textArea, 'focus', this._focusChange, this); - L.DomEvent.off(this.textArea, 'blur', this._focusChange, this); + DomEvent.off(this.textArea, 'input', this._autoResize, this); + DomEvent.off(this.textArea, 'focus', this._focusChange, this); + DomEvent.off(this.textArea, 'blur', this._focusChange, this); document.removeEventListener('click', this._documentClickThis, { capture: true, }); @@ -70,7 +71,7 @@ Edit.Text = Edit.extend({ this.textArea.focus(); this.textArea.selectionStart = 0; this.textArea.selectionEnd = 0; - L.DomEvent.on(this.textArea, 'mousedown', this._preventTextSelection); + DomEvent.on(this.textArea, 'mousedown', this._preventTextSelection); focusedElement.focus(); this._disableOnBlurActive = false; @@ -258,7 +259,7 @@ Edit.Text = Edit.extend({ this.textArea.wrap = 'off'; this.textArea.style.overflow = 'hidden'; - this.textArea.style.height = L.DomUtil.getStyle(this.textArea, 'font-size'); + this.textArea.style.height = DomUtil.getStyle(this.textArea, 'font-size'); this.textArea.style.width = '1px'; if (this._layer.options.text) { diff --git a/src/js/Edit/L.PM.Edit.js b/src/js/Edit/L.PM.Edit.js index 9702b5a5..7d09a55c 100644 --- a/src/js/Edit/L.PM.Edit.js +++ b/src/js/Edit/L.PM.Edit.js @@ -1,9 +1,10 @@ -import SnapMixin from '../Mixins/Snapping'; +import { Class, Polygon, Util } from 'leaflet'; import DragMixin from '../Mixins/Dragging'; -import RotateMixin from '../Mixins/Rotating'; import EventMixin from '../Mixins/Events'; +import RotateMixin from '../Mixins/Rotating'; +import SnapMixin from '../Mixins/Snapping'; -const Edit = L.Class.extend({ +const Edit = Class.extend({ includes: [DragMixin, SnapMixin, RotateMixin, EventMixin], options: { snappable: true, // TODO: next major Release, rename it to allowSnapping @@ -32,7 +33,7 @@ const Edit = L.Class.extend({ snapVertex: true, }, setOptions(options) { - L.Util.setOptions(this, options); + Util.setOptions(this, options); }, getOptions() { return this.options; @@ -40,7 +41,7 @@ const Edit = L.Class.extend({ applyOptions() {}, isPolygon() { // if it's a polygon, it means the coordinates array is multi dimensional - return this._layer instanceof L.Polygon; + return this._layer instanceof Polygon; }, getShape() { return this._shape; diff --git a/src/js/L.PM.Map.js b/src/js/L.PM.Map.js index 572fecb8..7de3518b 100644 --- a/src/js/L.PM.Map.js +++ b/src/js/L.PM.Map.js @@ -1,14 +1,15 @@ +import { Class, CRS, DomEvent, FeatureGroup, LayerGroup } from 'leaflet'; import merge from 'lodash/merge'; import translations from '../assets/translations'; -import GlobalEditMode from './Mixins/Modes/Mode.Edit'; +import EventMixin from './Mixins/Events'; +import createKeyboardMixins from './Mixins/Keyboard'; import GlobalDragMode from './Mixins/Modes/Mode.Drag'; +import GlobalEditMode from './Mixins/Modes/Mode.Edit'; import GlobalRemovalMode from './Mixins/Modes/Mode.Removal'; import GlobalRotateMode from './Mixins/Modes/Mode.Rotate'; -import EventMixin from './Mixins/Events'; -import createKeyboardMixins from './Mixins/Keyboard'; import { getRenderer } from './helpers'; -const Map = L.Class.extend({ +const Map = Class.extend({ includes: [ GlobalEditMode, GlobalDragMode, @@ -214,7 +215,7 @@ const Map = L.Class.extend({ if (!asGroup) { return layers; } - const group = L.featureGroup(); + const group = new FeatureGroup(); group._pmTempLayer = true; layers.forEach((layer) => { group.addLayer(layer); @@ -228,7 +229,7 @@ const Map = L.Class.extend({ if (!asGroup) { return layers; } - const group = L.featureGroup(); + const group = new FeatureGroup(); group._pmTempLayer = true; layers.forEach((layer) => { group.addLayer(layer); @@ -238,19 +239,19 @@ const Map = L.Class.extend({ // returns the map instance by default or a layergroup is set through global options _getContainingLayer() { return this.globalOptions.layerGroup && - this.globalOptions.layerGroup instanceof L.LayerGroup + this.globalOptions.layerGroup instanceof LayerGroup ? this.globalOptions.layerGroup : this.map; }, _isCRSSimple() { - return this.map.options.crs === L.CRS.Simple; + return this.map.options.crs === CRS.Simple; }, // in Canvas mode we need to convert touch- and pointerevents (IE) to mouseevents, because Leaflet don't support them. _touchEventCounter: 0, _addTouchEvents(elm) { if (this._touchEventCounter === 0) { - L.DomEvent.on(elm, 'touchmove', this._canvasTouchMove, this); - L.DomEvent.on( + DomEvent.on(elm, 'touchmove', this._canvasTouchMove, this); + DomEvent.on( elm, 'touchstart touchend touchcancel', this._canvasTouchClick, @@ -261,8 +262,8 @@ const Map = L.Class.extend({ }, _removeTouchEvents(elm) { if (this._touchEventCounter === 1) { - L.DomEvent.off(elm, 'touchmove', this._canvasTouchMove, this); - L.DomEvent.off( + DomEvent.off(elm, 'touchmove', this._canvasTouchMove, this); + DomEvent.off( elm, 'touchstart touchend touchcancel', this._canvasTouchClick, diff --git a/src/js/L.PM.Utils.js b/src/js/L.PM.Utils.js index 0a9ea6d2..f4816c98 100644 --- a/src/js/L.PM.Utils.js +++ b/src/js/L.PM.Utils.js @@ -1,3 +1,4 @@ +import { Circle, CircleMarker, ImageOverlay, LatLng, Marker, Point, Polygon, Polyline } from 'leaflet'; import { createGeodesicPolygon, getTranslation } from './helpers'; import { _toLatLng, _toPoint } from './helpers/ModeHelper'; @@ -14,11 +15,11 @@ const Utils = { let layers = []; map.eachLayer((layer) => { if ( - layer instanceof L.Polyline || - layer instanceof L.Marker || - layer instanceof L.Circle || - layer instanceof L.CircleMarker || - layer instanceof L.ImageOverlay + layer instanceof Polyline || + layer instanceof Marker || + layer instanceof Circle || + layer instanceof CircleMarker || + layer instanceof ImageOverlay ) { layers.push(layer); } @@ -48,7 +49,7 @@ const Utils = { const geometry = [polys[i].lat, polys[i].lng]; polygon.push(geometry); } - return L.polygon(polygon, circle.options); + return new Polygon(polygon, circle.options); }, disablePopup(layer) { if (layer.getPopup()) { @@ -124,7 +125,7 @@ const Utils = { result = iRes; return true; } - } else if (v.lat && L.latLng(v).equals(latlng)) { + } else if (v.lat && new LatLng(v).equals(latlng)) { result = iRes; return true; } @@ -217,7 +218,7 @@ const Utils = { }, pxRadiusToMeterRadius(radiusInPx, map, center) { const pointA = map.project(center); - const pointB = L.point(pointA.x + radiusInPx, pointA.y); + const pointB = new Point(pointA.x + radiusInPx, pointA.y); return map.distance(map.unproject(pointB), center); }, }; diff --git a/src/js/L.PM.js b/src/js/L.PM.js index 7d9000f4..f64d9361 100644 --- a/src/js/L.PM.js +++ b/src/js/L.PM.js @@ -8,38 +8,39 @@ * Get Pro: https://geoman.io */ -import './polyfills'; import packageInfo from '../../package.json'; +import './polyfills'; import Map from './L.PM.Map'; import Toolbar from './Toolbar/L.PM.Toolbar'; import Draw from './Draw/L.PM.Draw'; -import './Draw/L.PM.Draw.Marker'; +import './Draw/L.PM.Draw.CircleMarker'; +import './Draw/L.PM.Draw.Circle'; import './Draw/L.PM.Draw.Line'; +import './Draw/L.PM.Draw.Marker'; import './Draw/L.PM.Draw.Polygon'; import './Draw/L.PM.Draw.Rectangle'; -import './Draw/L.PM.Draw.CircleMarker'; -import './Draw/L.PM.Draw.Circle'; import './Draw/L.PM.Draw.Cut'; import './Draw/L.PM.Draw.Text'; import Edit from './Edit/L.PM.Edit'; +import './Edit/L.PM.Edit.CircleMarker'; +import './Edit/L.PM.Edit.Circle'; +import './Edit/L.PM.Edit.ImageOverlay'; import './Edit/L.PM.Edit.LayerGroup'; -import './Edit/L.PM.Edit.Marker'; import './Edit/L.PM.Edit.Line'; +import './Edit/L.PM.Edit.Marker'; import './Edit/L.PM.Edit.Polygon'; import './Edit/L.PM.Edit.Rectangle'; -import './Edit/L.PM.Edit.CircleMarker'; -import './Edit/L.PM.Edit.Circle'; -import './Edit/L.PM.Edit.ImageOverlay'; import './Edit/L.PM.Edit.Text'; -import '../css/layers.css'; import '../css/controls.css'; +import '../css/layers.css'; import Matrix from './helpers/Matrix'; +import { Canvas, Circle, CircleMarker, DomEvent, ImageOverlay, LayerGroup, Map as LeafletMap, Marker, Polygon, Polyline, Rectangle, version } from 'leaflet'; import Utils from './L.PM.Utils'; L.PM = L.PM || { @@ -75,7 +76,7 @@ L.PM = L.PM || { } } - L.Map.addInitHook(initMap); + LeafletMap.addInitHook(initMap); function initLayerGroup() { this.pm = undefined; @@ -88,7 +89,7 @@ L.PM = L.PM || { } } - L.LayerGroup.addInitHook(initLayerGroup); + LayerGroup.addInitHook(initLayerGroup); function initMarker() { this.pm = undefined; @@ -117,7 +118,7 @@ L.PM = L.PM || { } } } - L.Marker.addInitHook(initMarker); + Marker.addInitHook(initMarker); function initCircleMarker() { this.pm = undefined; @@ -130,7 +131,7 @@ L.PM = L.PM || { this.pm = new L.PM.Edit.CircleMarker(this); } } - L.CircleMarker.addInitHook(initCircleMarker); + CircleMarker.addInitHook(initCircleMarker); function initPolyline() { this.pm = undefined; @@ -144,7 +145,7 @@ L.PM = L.PM || { } } - L.Polyline.addInitHook(initPolyline); + Polyline.addInitHook(initPolyline); function initPolygon() { this.pm = undefined; @@ -158,7 +159,7 @@ L.PM = L.PM || { } } - L.Polygon.addInitHook(initPolygon); + Polygon.addInitHook(initPolygon); function initRectangle() { this.pm = undefined; @@ -172,7 +173,7 @@ L.PM = L.PM || { } } - L.Rectangle.addInitHook(initRectangle); + Rectangle.addInitHook(initRectangle); function initCircle() { this.pm = undefined; @@ -186,7 +187,7 @@ L.PM = L.PM || { } } - L.Circle.addInitHook(initCircle); + Circle.addInitHook(initCircle); function initImageOverlay() { this.pm = undefined; @@ -200,10 +201,10 @@ L.PM = L.PM || { } } - L.ImageOverlay.addInitHook(initImageOverlay); + ImageOverlay.addInitHook(initImageOverlay); }, reInitLayer(layer) { - if (layer instanceof L.LayerGroup) { + if (layer instanceof LayerGroup) { layer.eachLayer((_layer) => { this.reInitLayer(_layer); }); @@ -214,9 +215,9 @@ L.PM = L.PM || { // Opt-In is true and pmIgnore is not false } else if (layer.options.pmIgnore) { // pmIgnore is true - } else if (layer instanceof L.Map) { + } else if (layer instanceof LeafletMap) { layer.pm = new L.PM.Map(layer); - } else if (layer instanceof L.Marker) { + } else if (layer instanceof Marker) { if (layer.options.textMarker) { layer.pm = new L.PM.Edit.Text(layer); layer.pm._initTextMarker(); @@ -224,28 +225,28 @@ L.PM = L.PM || { } else { layer.pm = new L.PM.Edit.Marker(layer); } - } else if (layer instanceof L.Circle) { + } else if (layer instanceof Circle) { layer.pm = new L.PM.Edit.Circle(layer); - } else if (layer instanceof L.CircleMarker) { + } else if (layer instanceof CircleMarker) { layer.pm = new L.PM.Edit.CircleMarker(layer); - } else if (layer instanceof L.Rectangle) { + } else if (layer instanceof Rectangle) { layer.pm = new L.PM.Edit.Rectangle(layer); - } else if (layer instanceof L.Polygon) { + } else if (layer instanceof Polygon) { layer.pm = new L.PM.Edit.Polygon(layer); - } else if (layer instanceof L.Polyline) { + } else if (layer instanceof Polyline) { layer.pm = new L.PM.Edit.Line(layer); - } else if (layer instanceof L.LayerGroup) { + } else if (layer instanceof LayerGroup) { layer.pm = new L.PM.Edit.LayerGroup(layer); - } else if (layer instanceof L.ImageOverlay) { + } else if (layer instanceof ImageOverlay) { layer.pm = new L.PM.Edit.ImageOverlay(layer); } }, }; -if (L.version === '1.7.1') { +if (version === '1.7.1') { // Canvas Mode: After dragging the map the target layer can't be dragged anymore until it is clicked // https://github.com/Leaflet/Leaflet/issues/7775 a fix is already merged for the Leaflet 1.8.0 version - L.Canvas.include({ + Canvas.include({ _onClick(e) { const point = this._map.mouseEventToLayerPoint(e); let layer; @@ -264,7 +265,7 @@ if (L.version === '1.7.1') { } } if (clickedLayer) { - L.DomEvent.fakeStop(e); + DomEvent.fakeStop(e); this._fireEvent([clickedLayer], e); } }, diff --git a/src/js/Mixins/Dragging.js b/src/js/Mixins/Dragging.js index 2d7c4de4..6c7cc9e5 100644 --- a/src/js/Mixins/Dragging.js +++ b/src/js/Mixins/Dragging.js @@ -1,3 +1,4 @@ +import { Canvas, Circle, CircleMarker, DomEvent, DomUtil, ImageOverlay, LayerGroup, Marker, Util } from 'leaflet'; import { getRenderer } from '../helpers'; const DragMixin = { @@ -18,11 +19,11 @@ const DragMixin = { } if ( - this._layer instanceof L.Marker || - this._layer instanceof L.ImageOverlay + this._layer instanceof Marker || + this._layer instanceof ImageOverlay ) { // prevents dragging the DOM image instead of the marker - L.DomEvent.on(this._getDOMElem(), 'dragstart', this._stopDOMImageDrag); + DomEvent.on(this._getDOMElem(), 'dragstart', this._stopDOMImageDrag); } // Disable Leaflet Dragging of Markers @@ -34,7 +35,7 @@ const DragMixin = { this._tempDragCoord = null; // add CSS class - if (getRenderer(this._layer) instanceof L.Canvas) { + if (getRenderer(this._layer) instanceof Canvas) { this._layer.on('mouseout', this.removeDraggingClass, this); this._layer.on('mouseover', this.addDraggingClass, this); } else { @@ -52,7 +53,7 @@ const DragMixin = { // check if DOM element exists if (container) { // add mousedown event to trigger drag - if (getRenderer(this._layer) instanceof L.Canvas) { + if (getRenderer(this._layer) instanceof Canvas) { this._layer.on( 'touchstart mousedown', this._dragMixinOnMouseDown, @@ -62,7 +63,7 @@ const DragMixin = { } else { // We can't just use layer.on('mousedown') because on touch devices the event is not fired if user presses on the layer and then drag it. // With checking on touchstart and mousedown on the DOM element we can listen on the needed events - L.DomEvent.on( + DomEvent.on( container, 'touchstart mousedown', this._simulateMouseDownEvent, @@ -77,7 +78,7 @@ const DragMixin = { this._layerDragEnabled = false; // remove CSS class - if (getRenderer(this._layer) instanceof L.Canvas) { + if (getRenderer(this._layer) instanceof Canvas) { this._layer.off('mouseout', this.removeDraggingClass, this); this._layer.off('mouseover', this.addDraggingClass, this); } else { @@ -100,7 +101,7 @@ const DragMixin = { const container = this._getDOMElem(); // check if DOM element exists if (container) { - if (getRenderer(this._layer) instanceof L.Canvas) { + if (getRenderer(this._layer) instanceof Canvas) { this._layer.off( 'touchstart mousedown', this._dragMixinOnMouseDown, @@ -109,7 +110,7 @@ const DragMixin = { this._map.pm._removeTouchEvents(container); } else { // disable mousedown event - L.DomEvent.off( + DomEvent.off( container, 'touchstart mousedown', this._simulateMouseDownEvent, @@ -186,7 +187,7 @@ const DragMixin = { // if other layers found, snapping will be disabled const layersToSyncFound = this._syncLayers('_dragMixinOnMouseDown', e); - if (this._layer instanceof L.Marker) { + if (this._layer instanceof Marker) { if (this.options.snappable && !fromLayerSync && !layersToSyncFound) { this._initSnappableMarkers(); } else { @@ -195,9 +196,9 @@ const DragMixin = { } // we need to disable snapping for CircleMarker because they are snapping because of the check in onLayerDrag -> if(_snapped) - if (this._layer instanceof L.CircleMarker) { + if (this._layer instanceof CircleMarker) { let _editableOption = 'resizeableCircleMarker'; - if (this._layer instanceof L.Circle) { + if (this._layer instanceof Circle) { _editableOption = 'resizeableCircle'; } @@ -223,7 +224,7 @@ const DragMixin = { // save for delta calculation this._tempDragCoord = e.latlng; - L.DomEvent.on( + DomEvent.on( this._map.getContainer(), 'touchend mouseup', this._simulateMouseUpEvent, @@ -232,7 +233,7 @@ const DragMixin = { // listen to mousemove on map (instead of polygon), // otherwise fast mouse movements stop the drag - L.DomEvent.on( + DomEvent.on( this._map.getContainer(), 'touchmove mousemove', this._simulateMouseMoveEvent, @@ -248,9 +249,9 @@ const DragMixin = { if (!this._dragging) { // set state this._dragging = true; - L.DomUtil.addClass(el, 'leaflet-pm-dragging'); + el.classList.add('leaflet-pm-dragging'); - if (!(this._layer instanceof L.Marker)) { + if (!(this._layer instanceof Marker)) { // bring it to front to prevent drag interception this._layer.bringToFront(); } @@ -272,7 +273,7 @@ const DragMixin = { this._onLayerDrag(e); // update the hidden circle border after dragging - if (this._layer instanceof L.CircleMarker) { + if (this._layer instanceof CircleMarker) { this._layer.pm._updateHiddenPolyCircle(); } }, @@ -289,7 +290,7 @@ const DragMixin = { // if mouseup event fired, it's safe to cache the map draggable state on the next mouse down this._safeToCacheDragState = true; // clear up mousemove event - L.DomEvent.off( + DomEvent.off( this._map.getContainer(), 'touchmove mousemove', this._simulateMouseMoveEvent, @@ -297,7 +298,7 @@ const DragMixin = { ); // clear up mouseup event - L.DomEvent.off( + DomEvent.off( this._map.getContainer(), 'touchend mouseup', this._simulateMouseUpEvent, @@ -310,7 +311,7 @@ const DragMixin = { } // update the hidden circle border after dragging - if (this._layer instanceof L.CircleMarker) { + if (this._layer instanceof CircleMarker) { this._layer.pm._updateHiddenPolyCircle(); } @@ -323,7 +324,7 @@ const DragMixin = { this._dragging = false; // if the layer is not on the map, we have no DOM element if (el) { - L.DomUtil.removeClass(el, 'leaflet-pm-dragging'); + el.classList.remove('leaflet-pm-dragging'); } // fire pm:dragend event @@ -368,9 +369,9 @@ const DragMixin = { }); if ( - (this._layer instanceof L.Circle && + (this._layer instanceof Circle && this._layer.options.resizeableCircle) || - (this._layer instanceof L.CircleMarker && + (this._layer instanceof CircleMarker && this._layer.options.resizeableCircleMarker) ) { // create the new coordinates array @@ -379,8 +380,8 @@ const DragMixin = { this._layer.setLatLng(newCoords[0]); this._fireChange(this._layer.getLatLng(), 'Edit'); } else if ( - this._layer instanceof L.CircleMarker || - this._layer instanceof L.Marker + this._layer instanceof CircleMarker || + this._layer instanceof Marker ) { let coordsRefernce = this._layer.getLatLng(); if (this._layer._snapped) { @@ -392,7 +393,7 @@ const DragMixin = { // set new coordinates and redraw this._layer.setLatLng(newCoords[0]); this._fireChange(this._layer.getLatLng(), 'Edit'); - } else if (this._layer instanceof L.ImageOverlay) { + } else if (this._layer instanceof ImageOverlay) { // create the new coordinates array const newCoords = moveCoords([ this._layer.getBounds().getNorthWest(), @@ -420,13 +421,13 @@ const DragMixin = { addDraggingClass() { const el = this._getDOMElem(); if (el) { - L.DomUtil.addClass(el, 'leaflet-pm-draggable'); + el.classList.add('leaflet-pm-draggable'); } }, removeDraggingClass() { const el = this._getDOMElem(); if (el) { - L.DomUtil.removeClass(el, 'leaflet-pm-draggable'); + el.classList.remove('leaflet-pm-draggable'); } }, _getDOMElem() { @@ -466,12 +467,12 @@ const DragMixin = { ) { e._fromLayerSync = true; let layersToSync = []; - if (L.Util.isArray(this.options.syncLayersOnDrag)) { + if (Util.isArray(this.options.syncLayersOnDrag)) { // layers layersToSync = this.options.syncLayersOnDrag; this.options.syncLayersOnDrag.forEach((layer) => { - if (layer instanceof L.LayerGroup) { + if (layer instanceof LayerGroup) { layersToSync = layersToSync.concat(layer.pm.getLayers(true)); } }); @@ -487,7 +488,7 @@ const DragMixin = { } } - if (L.Util.isArray(layersToSync) && layersToSync.length > 0) { + if (Util.isArray(layersToSync) && layersToSync.length > 0) { // filter out layers that don't have leaflet-geoman and not allowed to drag layersToSync = layersToSync .filter((layer) => !!layer.pm) diff --git a/src/js/Mixins/Events.js b/src/js/Mixins/Events.js index 759a3b04..6e0422ee 100644 --- a/src/js/Mixins/Events.js +++ b/src/js/Mixins/Events.js @@ -530,7 +530,7 @@ const EventMixin = { source = 'Toolbar', customPayload = {} ) { - // this._map is used because this is fired from L.Controls (PMButton) + // this._map is used because this is fired from Controls (PMButton) this.__fire( this._map, 'pm:actionclick', @@ -546,7 +546,7 @@ const EventMixin = { }, // Fired when a Toolbar button is clicked _fireButtonClick(btnName, button, source = 'Toolbar', customPayload = {}) { - // this._map is used because this is fired from L.Controls (PMButton) + // this._map is used because this is fired from Controls (PMButton) this.__fire( this._map, 'pm:buttonclick', diff --git a/src/js/Mixins/Keyboard.js b/src/js/Mixins/Keyboard.js index 8b24a469..17a162d8 100644 --- a/src/js/Mixins/Keyboard.js +++ b/src/js/Mixins/Keyboard.js @@ -1,17 +1,20 @@ // use function to create a new mixin object for keeping isolation + +import { DomEvent } from "leaflet"; + // to make it work for multiple map instances const createKeyboardMixins = () => ({ _lastEvents: { keydown: undefined, keyup: undefined, current: undefined }, _initKeyListener(map) { this.map = map; - L.DomEvent.on(document, 'keydown keyup', this._onKeyListener, this); - L.DomEvent.on(window, 'blur', this._onBlur, this); + DomEvent.on(document, 'keydown keyup', this._onKeyListener, this); + DomEvent.on(window, 'blur', this._onBlur, this); // clean up global listeners when current map instance is destroyed map.once('unload', this._unbindKeyListenerEvents, this); }, _unbindKeyListenerEvents() { - L.DomEvent.off(document, 'keydown keyup', this._onKeyListener, this); - L.DomEvent.off(window, 'blur', this._onBlur, this); + DomEvent.off(document, 'keydown keyup', this._onKeyListener, this); + DomEvent.off(window, 'blur', this._onBlur, this); }, _onKeyListener(e) { let focusOn = 'document'; diff --git a/src/js/Mixins/MarkerLimits.js b/src/js/Mixins/MarkerLimits.js index 77bb4b99..1d01c182 100644 --- a/src/js/Mixins/MarkerLimits.js +++ b/src/js/Mixins/MarkerLimits.js @@ -1,3 +1,5 @@ +import { Util } from "leaflet"; + const MarkerLimits = { filterMarkerGroup() { // define cache of markers @@ -11,7 +13,7 @@ const MarkerLimits = { this.applyLimitFilters({}); if (!this.throttledApplyLimitFilters) { - this.throttledApplyLimitFilters = L.Util.throttle( + this.throttledApplyLimitFilters = Util.throttle( this.applyLimitFilters, 100, this diff --git a/src/js/Mixins/Modes/Mode.Drag.js b/src/js/Mixins/Modes/Mode.Drag.js index b268f3a4..54dc889f 100644 --- a/src/js/Mixins/Modes/Mode.Drag.js +++ b/src/js/Mixins/Modes/Mode.Drag.js @@ -1,3 +1,5 @@ +import { LayerGroup, Util } from "leaflet"; + const GlobalDragMode = { _globalDragModeEnabled: false, enableGlobalDragMode() { @@ -13,7 +15,7 @@ const GlobalDragMode = { }); if (!this.throttledReInitDrag) { - this.throttledReInitDrag = L.Util.throttle( + this.throttledReInitDrag = Util.throttle( this.reinitGlobalDragMode, 100, this @@ -71,12 +73,12 @@ const GlobalDragMode = { } }, _layerAddedDrag({ layer }) { - this._addedLayersDrag[L.stamp(layer)] = layer; + this._addedLayersDrag[Util.stamp(layer)] = layer; }, _isRelevantForDrag(layer) { return ( layer.pm && - !(layer instanceof L.LayerGroup) && + !(layer instanceof LayerGroup) && ((!L.PM.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) (L.PM.optIn && layer.options.pmIgnore === false)) && // if optIn is true and pmIgnore is false !layer._pmTempLayer && diff --git a/src/js/Mixins/Modes/Mode.Edit.js b/src/js/Mixins/Modes/Mode.Edit.js index b2c2befd..4c8863b8 100644 --- a/src/js/Mixins/Modes/Mode.Edit.js +++ b/src/js/Mixins/Modes/Mode.Edit.js @@ -1,3 +1,5 @@ +import { LayerGroup, Util } from "leaflet"; + // this mixin adds a global edit mode to the map const GlobalEditMode = { _globalEditModeEnabled: false, @@ -22,7 +24,7 @@ const GlobalEditMode = { }); if (!this.throttledReInitEdit) { - this.throttledReInitEdit = L.Util.throttle( + this.throttledReInitEdit = Util.throttle( this.handleLayerAdditionInGlobalEditMode, 100, this @@ -93,12 +95,12 @@ const GlobalEditMode = { } }, _layerAddedEdit({ layer }) { - this._addedLayersEdit[L.stamp(layer)] = layer; + this._addedLayersEdit[Util.stamp(layer)] = layer; }, _isRelevantForEdit(layer) { return ( layer.pm && - !(layer instanceof L.LayerGroup) && + !(layer instanceof LayerGroup) && ((!L.PM.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) (L.PM.optIn && layer.options.pmIgnore === false)) && // if optIn is true and pmIgnore is false !layer._pmTempLayer && diff --git a/src/js/Mixins/Modes/Mode.Removal.js b/src/js/Mixins/Modes/Mode.Removal.js index d3e6527a..33c43054 100644 --- a/src/js/Mixins/Modes/Mode.Removal.js +++ b/src/js/Mixins/Modes/Mode.Removal.js @@ -1,3 +1,5 @@ +import { LayerGroup, Util } from "leaflet"; + const GlobalRemovalMode = { _globalRemovalModeEnabled: false, enableGlobalRemovalMode() { @@ -13,7 +15,7 @@ const GlobalRemovalMode = { }); if (!this.throttledReInitRemoval) { - this.throttledReInitRemoval = L.Util.throttle( + this.throttledReInitRemoval = Util.throttle( this.handleLayerAdditionInGlobalRemovalMode, 100, this @@ -70,7 +72,7 @@ const GlobalRemovalMode = { if (removeable) { layer.removeFrom(this.map.pm._getContainingLayer()); layer.remove(); - if (layer instanceof L.LayerGroup) { + if (layer instanceof LayerGroup) { this._fireRemoveLayerGroup(layer); this._fireRemoveLayerGroup(this.map, layer); } else { @@ -82,7 +84,7 @@ const GlobalRemovalMode = { _isRelevantForRemoval(layer) { return ( layer.pm && - !(layer instanceof L.LayerGroup) && + !(layer instanceof LayerGroup) && ((!L.PM.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) (L.PM.optIn && layer.options.pmIgnore === false)) && // if optIn is true and pmIgnore is false !layer._pmTempLayer && @@ -105,7 +107,7 @@ const GlobalRemovalMode = { } }, _layerAddedRemoval({ layer }) { - this._addedLayersRemoval[L.stamp(layer)] = layer; + this._addedLayersRemoval[Util.stamp(layer)] = layer; }, }; diff --git a/src/js/Mixins/Modes/Mode.Rotate.js b/src/js/Mixins/Modes/Mode.Rotate.js index 6f84da5d..50f33422 100644 --- a/src/js/Mixins/Modes/Mode.Rotate.js +++ b/src/js/Mixins/Modes/Mode.Rotate.js @@ -1,9 +1,11 @@ +import { LayerGroup, Polyline, Util } from "leaflet"; + const GlobalRotateMode = { _globalRotateModeEnabled: false, enableGlobalRotateMode() { this._globalRotateModeEnabled = true; const layers = L.PM.Utils.findLayers(this.map).filter( - (l) => l instanceof L.Polyline + (l) => l instanceof Polyline ); layers.forEach((layer) => { if (this._isRelevantForRotate(layer)) { @@ -12,7 +14,7 @@ const GlobalRotateMode = { }); if (!this.throttledReInitRotate) { - this.throttledReInitRotate = L.Util.throttle( + this.throttledReInitRotate = Util.throttle( this.handleLayerAdditionInGlobalRotateMode, 100, this @@ -31,7 +33,7 @@ const GlobalRotateMode = { disableGlobalRotateMode() { this._globalRotateModeEnabled = false; const layers = L.PM.Utils.findLayers(this.map).filter( - (l) => l instanceof L.Polyline + (l) => l instanceof Polyline ); layers.forEach((layer) => { layer.pm.disableRotate(); @@ -58,8 +60,8 @@ const GlobalRotateMode = { _isRelevantForRotate(layer) { return ( layer.pm && - layer instanceof L.Polyline && - !(layer instanceof L.LayerGroup) && + layer instanceof Polyline && + !(layer instanceof LayerGroup) && ((!L.PM.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) (L.PM.optIn && layer.options.pmIgnore === false)) && // if optIn is true and pmIgnore is false !layer._pmTempLayer && @@ -79,7 +81,7 @@ const GlobalRotateMode = { } }, _layerAddedRotate({ layer }) { - this._addedLayersRotate[L.stamp(layer)] = layer; + this._addedLayersRotate[Util.stamp(layer)] = layer; }, }; export default GlobalRotateMode; diff --git a/src/js/Mixins/Rotating.js b/src/js/Mixins/Rotating.js index 08a75128..eaa39397 100644 --- a/src/js/Mixins/Rotating.js +++ b/src/js/Mixins/Rotating.js @@ -1,6 +1,7 @@ +import { Polygon, Util } from 'leaflet'; import get from 'lodash/get'; -import { _convertLatLngs, _toPoint } from '../helpers/ModeHelper'; import { calcAngle, copyLatLngs } from '../helpers'; +import { _convertLatLngs, _toPoint } from '../helpers/ModeHelper'; /** * We create a temporary polygon with the same latlngs as the layer that we want to rotate. @@ -54,7 +55,7 @@ const RotateMixin = { if (_i > -1) { path.push(_i); } - if (L.Util.isArray(latlng[0])) { + if (Util.isArray(latlng[0])) { latlng.forEach((x, i) => forEachLatLng(x, path.slice(), i)); } else { const markers = @@ -130,7 +131,7 @@ const RotateMixin = { return this._rotationCenter; } - const polygon = L.polygon(this._layer.getLatLngs(), { + const polygon = new Polygon(this._layer.getLatLngs(), { stroke: false, fill: false, pmIgnore: true, @@ -174,7 +175,7 @@ const RotateMixin = { }; // we create a temp polygon for rotation - this._rotatePoly = L.polygon(this._layer.getLatLngs(), options); + this._rotatePoly = new Polygon(this._layer.getLatLngs(), options); this._rotatePoly._pmTempLayer = true; this._rotatePoly.addTo(this._layer._map); this._rotatePoly.pm._setAngle(this.getAngle()); @@ -240,7 +241,7 @@ const RotateMixin = { ) ); // store the new latlngs - this._rotateOrgLatLng = L.polygon(this._layer.getLatLngs()).getLatLngs(); + this._rotateOrgLatLng = new Polygon(this._layer.getLatLngs()).getLatLngs(); this._setAngle(this.getAngle() + degrees); if ( this.rotateEnabled() && diff --git a/src/js/Mixins/Snapping.js b/src/js/Mixins/Snapping.js index c900fb21..f472e71e 100644 --- a/src/js/Mixins/Snapping.js +++ b/src/js/Mixins/Snapping.js @@ -1,3 +1,4 @@ +import { Circle, CircleMarker, ImageOverlay, LineUtil, Marker, Polygon, Polyline, Rectangle, Util } from 'leaflet'; import { hasValues, prioritiseSort } from '../helpers'; const SnapMixin = { @@ -68,7 +69,7 @@ const SnapMixin = { marker._snapped = false; if (!this.throttledList) { - this.throttledList = L.Util.throttle( + this.throttledList = Util.throttle( this._handleThrottleSnapping, 100, this @@ -109,8 +110,8 @@ const SnapMixin = { } const isMarker = - closestLayer.layer instanceof L.Marker || - closestLayer.layer instanceof L.CircleMarker || + closestLayer.layer instanceof Marker || + closestLayer.layer instanceof CircleMarker || !this.options.snapSegment; // find the final latlng that we want to snap to @@ -191,10 +192,10 @@ const SnapMixin = { // temporary markers of polygon-edits map.eachLayer((layer) => { if ( - (layer instanceof L.Polyline || - layer instanceof L.Marker || - layer instanceof L.CircleMarker || - layer instanceof L.ImageOverlay) && + (layer instanceof Polyline || + layer instanceof Marker || + layer instanceof CircleMarker || + layer instanceof ImageOverlay) && layer.options.snapIgnore !== true ) { // if snapIgnore === false the layer will be always snappable @@ -208,21 +209,21 @@ const SnapMixin = { // adds a hidden polygon which matches the border of the circle if ( - (layer instanceof L.Circle || layer instanceof L.CircleMarker) && + (layer instanceof Circle || layer instanceof CircleMarker) && layer.pm && layer.pm._hiddenPolyCircle ) { layers.push(layer.pm._hiddenPolyCircle); - } else if (layer instanceof L.ImageOverlay) { - layer = L.rectangle(layer.getBounds()); + } else if (layer instanceof ImageOverlay) { + layer = new Rectangle(layer.getBounds()); } layers.push(layer); // this is for debugging - const debugLine = L.polyline([], { color: 'red', pmIgnore: true }); + const debugLine = new Polyline([], { color: 'red', pmIgnore: true }); debugLine._pmTempLayer = true; debugIndicatorLines.push(debugLine); - if (layer instanceof L.Circle || layer instanceof L.CircleMarker) { + if (layer instanceof Circle || layer instanceof CircleMarker) { debugIndicatorLines.push(debugLine); } @@ -246,7 +247,7 @@ const SnapMixin = { if (this._otherSnapLayers) { this._otherSnapLayers.forEach(() => { // this is for debugging - const debugLine = L.polyline([], { color: 'red', pmIgnore: true }); + const debugLine = new Polyline([], { color: 'red', pmIgnore: true }); debugLine._pmTempLayer = true; debugIndicatorLines.push(debugLine); }); @@ -294,7 +295,7 @@ const SnapMixin = { if (this.debugIndicatorLines) { if (!this.debugIndicatorLines[index]) { - const debugLine = L.polyline([], { color: 'red', pmIgnore: true }); + const debugLine = new Polyline([], { color: 'red', pmIgnore: true }); debugLine._pmTempLayer = true; this.debugIndicatorLines[index] = debugLine; } @@ -335,7 +336,7 @@ const SnapMixin = { // return the closest layer and it's data // if there is no closest layer, return an empty object const result = this._getClosestLayerByPriority(closestLayers, amount); - if (L.Util.isArray(result)) { + if (Util.isArray(result)) { return result; } return [result]; @@ -345,10 +346,10 @@ const SnapMixin = { // is this a marker? const isMarker = - layer instanceof L.Marker || layer instanceof L.CircleMarker; + layer instanceof Marker || layer instanceof CircleMarker; // is it a polygon? - const isPolygon = layer instanceof L.Polygon; + const isPolygon = layer instanceof Polygon; // the point P which we want to snap (probpably the marker that is dragged) const P = latlng; @@ -541,14 +542,14 @@ const SnapMixin = { const P = map.project(latlng, maxzoom); const A = map.project(latlngA, maxzoom); const B = map.project(latlngB, maxzoom); - const closest = L.LineUtil.closestPointOnSegment(P, A, B); + const closest = LineUtil.closestPointOnSegment(P, A, B); return map.unproject(closest, maxzoom); }, _getDistanceToSegment(map, latlng, latlngA, latlngB) { const P = map.latLngToContainerPoint(latlng); const A = map.latLngToContainerPoint(latlngA); const B = map.latLngToContainerPoint(latlngB); - return L.LineUtil.pointToSegmentDistance(P, A, B); + return LineUtil.pointToSegmentDistance(P, A, B); }, _getDistance(map, latlngA, latlngB) { return map diff --git a/src/js/Toolbar/L.Controls.js b/src/js/Toolbar/L.Controls.js index da190522..04ffbacf 100644 --- a/src/js/Toolbar/L.Controls.js +++ b/src/js/Toolbar/L.Controls.js @@ -1,7 +1,8 @@ +import { Control, DomEvent, DomUtil, Util } from 'leaflet'; import { getTranslation } from '../helpers'; import EventMixin from '../Mixins/Events'; -const PMButton = L.Control.extend({ +const PMButton = Control.extend({ includes: [EventMixin], options: { position: 'topleft', @@ -10,7 +11,7 @@ const PMButton = L.Control.extend({ // TODO: clean up variable names like _button should be _options and that domNodeVariable stuff initialize(options) { // replaced setOptions with this because classNames returned undefined 🤔 - this._button = L.Util.extend({}, this.options, options); + this._button = Object.assign({}, this.options, options); }, onAdd(map) { this._map = map; @@ -101,7 +102,7 @@ const PMButton = L.Control.extend({ const pos = this.options.position.indexOf('right') > -1 ? 'pos-right' : ''; // button container - const buttonContainer = L.DomUtil.create( + const buttonContainer = DomUtil.create( 'div', `button-container ${pos}`, this._container @@ -112,7 +113,7 @@ const PMButton = L.Control.extend({ } // the button itself - const newButton = L.DomUtil.create( + const newButton = DomUtil.create( 'a', 'leaflet-buttons-control-button', buttonContainer @@ -122,7 +123,7 @@ const PMButton = L.Control.extend({ newButton.href = '#'; // the buttons actions - const actionContainer = L.DomUtil.create( + const actionContainer = DomUtil.create( 'div', `leaflet-pm-actions-container ${pos}`, buttonContainer @@ -171,7 +172,7 @@ const PMButton = L.Control.extend({ } else { return action; } - const actionNode = L.DomUtil.create( + const actionNode = DomUtil.create( 'a', `leaflet-pm-action ${pos} action-${name}`, actionContainer @@ -186,8 +187,8 @@ const PMButton = L.Control.extend({ actionNode.innerHTML = action.text; - L.DomEvent.disableClickPropagation(actionNode); - L.DomEvent.on(actionNode, 'click', L.DomEvent.stop); + DomEvent.disableClickPropagation(actionNode); + DomEvent.on(actionNode, 'click', DomEvent.stop); action._node = actionNode; @@ -207,9 +208,9 @@ const PMButton = L.Control.extend({ this._fireActionClick(action, btnName, button); }; - L.DomEvent.addListener(actionNode, 'click', actionClick, this); - L.DomEvent.addListener(actionNode, 'click', action.onClick, this); - L.DomEvent.addListener(actionNode, 'click', () => + DomEvent.addListener(actionNode, 'click', actionClick, this); + DomEvent.addListener(actionNode, 'click', action.onClick, this); + DomEvent.addListener(actionNode, 'click', () => this._updateActiveAction(button) ); } @@ -219,30 +220,30 @@ const PMButton = L.Control.extend({ this._updateActiveAction(button); if (button.toggleStatus) { - L.DomUtil.addClass(buttonContainer, 'active'); + buttonContainer.classList.add('active'); } - const image = L.DomUtil.create('div', 'control-icon', newButton); + const image = DomUtil.create('div', 'control-icon', newButton); if (button.iconUrl) { image.setAttribute('src', button.iconUrl); } if (button.className) { - L.DomUtil.addClass(image, button.className); + image.classList.add(button.className); } - L.DomEvent.disableClickPropagation(newButton); - L.DomEvent.on(newButton, 'click', L.DomEvent.stop); + DomEvent.disableClickPropagation(newButton); + DomEvent.on(newButton, 'click', DomEvent.stop); if (!button.disabled) { // before the actual click, trigger a click on currently toggled buttons to // untoggle them and their functionality - L.DomEvent.addListener(newButton, 'click', this._onBtnClick, this); - L.DomEvent.addListener(newButton, 'click', this._triggerClick, this); + DomEvent.addListener(newButton, 'click', this._onBtnClick, this); + DomEvent.addListener(newButton, 'click', this._triggerClick, this); } if (button.disabled) { - L.DomUtil.addClass(newButton, 'pm-disabled'); + newButton.classList.add('pm-disabled'); newButton.setAttribute('aria-disabled', 'true'); } @@ -255,11 +256,11 @@ const PMButton = L.Control.extend({ } if (!this._button.toggleStatus || this._button.cssToggle === false) { - L.DomUtil.removeClass(this.buttonsDomNode, 'active'); - L.DomUtil.removeClass(this._container, 'activeChild'); + this.buttonsDomNode.classList.remove('active'); + this.buttonsDomNode.classList.remove('activeChild'); } else { - L.DomUtil.addClass(this.buttonsDomNode, 'active'); - L.DomUtil.addClass(this._container, 'activeChild'); + this.buttonsDomNode.classList.add('active'); + this.buttonsDomNode.classList.add('activeChild'); } }, @@ -296,10 +297,10 @@ const PMButton = L.Control.extend({ const button = this.buttonsDomNode.children[0]; if (this._button.disabled) { - L.DomUtil.addClass(button, className); + button.classList.add(className); button.setAttribute('aria-disabled', 'true'); } else { - L.DomUtil.removeClass(button, className); + button.classList.remove(className); button.setAttribute('aria-disabled', 'false'); } }, @@ -307,9 +308,9 @@ const PMButton = L.Control.extend({ button._preparedActions?.forEach((action) => { if (action?._node) { if (action.isActive && action.isActive.call(this)) { - L.DomUtil.addClass(action._node, 'active-action'); + action._node.classList.add('active-action'); } else { - L.DomUtil.removeClass(action._node, 'active-action'); + action._node.classList.remove('active-action'); } } }); diff --git a/src/js/Toolbar/L.PM.Toolbar.js b/src/js/Toolbar/L.PM.Toolbar.js index ca45006b..41d787c2 100644 --- a/src/js/Toolbar/L.PM.Toolbar.js +++ b/src/js/Toolbar/L.PM.Toolbar.js @@ -1,10 +1,11 @@ import PMButton from './L.Controls'; +import { Class, Control, DomUtil, Util } from 'leaflet'; import { getTranslation } from '../helpers'; -L.Control.PMButton = PMButton; +Control.PMButton = PMButton; -const Toolbar = L.Class.extend({ +const Toolbar = Class.extend({ options: { drawMarker: true, drawRectangle: true, @@ -60,19 +61,19 @@ const Toolbar = L.Class.extend({ this.buttons = {}; this.isVisible = false; - this.drawContainer = L.DomUtil.create( + this.drawContainer = DomUtil.create( 'div', 'leaflet-pm-toolbar leaflet-pm-draw leaflet-bar leaflet-control' ); - this.editContainer = L.DomUtil.create( + this.editContainer = DomUtil.create( 'div', 'leaflet-pm-toolbar leaflet-pm-edit leaflet-bar leaflet-control' ); - this.optionsContainer = L.DomUtil.create( + this.optionsContainer = DomUtil.create( 'div', 'leaflet-pm-toolbar leaflet-pm-options leaflet-bar leaflet-control' ); - this.customContainer = L.DomUtil.create( + this.customContainer = DomUtil.create( 'div', 'leaflet-pm-toolbar leaflet-pm-custom leaflet-bar leaflet-control' ); @@ -82,7 +83,7 @@ const Toolbar = L.Class.extend({ _createContainer(name) { const container = `${name}Container`; if (!this[container]) { - this[container] = L.DomUtil.create( + this[container] = DomUtil.create( 'div', `leaflet-pm-toolbar leaflet-pm-${name} leaflet-bar leaflet-control` ); @@ -105,7 +106,7 @@ const Toolbar = L.Class.extend({ } // first set the options - L.Util.setOptions(this, options); + Util.setOptions(this, options); this.applyIconStyle(); @@ -135,7 +136,7 @@ const Toolbar = L.Class.extend({ for (const name in buttons) { const button = buttons[name]; - L.Util.setOptions(button, { + Util.setOptions(button, { className: iconClasses.geomanIcons[name], }); } @@ -410,21 +411,21 @@ const Toolbar = L.Class.extend({ actions: ['cancel'], }; - this._addButton('drawMarker', new L.Control.PMButton(drawMarkerButton)); - this._addButton('drawPolyline', new L.Control.PMButton(drawLineButton)); - this._addButton('drawRectangle', new L.Control.PMButton(drawRectButton)); - this._addButton('drawPolygon', new L.Control.PMButton(drawPolyButton)); - this._addButton('drawCircle', new L.Control.PMButton(drawCircleButton)); + this._addButton('drawMarker', new PMButton(drawMarkerButton)); + this._addButton('drawPolyline', new PMButton(drawLineButton)); + this._addButton('drawRectangle', new PMButton(drawRectButton)); + this._addButton('drawPolygon', new PMButton(drawPolyButton)); + this._addButton('drawCircle', new PMButton(drawCircleButton)); this._addButton( 'drawCircleMarker', - new L.Control.PMButton(drawCircleMarkerButton) + new PMButton(drawCircleMarkerButton) ); - this._addButton('drawText', new L.Control.PMButton(drawTextButton)); - this._addButton('editMode', new L.Control.PMButton(editButton)); - this._addButton('dragMode', new L.Control.PMButton(dragButton)); - this._addButton('cutPolygon', new L.Control.PMButton(cutButton)); - this._addButton('removalMode', new L.Control.PMButton(deleteButton)); - this._addButton('rotateMode', new L.Control.PMButton(rotateButton)); + this._addButton('drawText', new PMButton(drawTextButton)); + this._addButton('editMode', new PMButton(editButton)); + this._addButton('dragMode', new PMButton(dragButton)); + this._addButton('cutPolygon', new PMButton(cutButton)); + this._addButton('removalMode', new PMButton(deleteButton)); + this._addButton('rotateMode', new PMButton(rotateButton)); }, _showHideButtons() { @@ -576,7 +577,7 @@ const Toolbar = L.Class.extend({ const control = this._addButton( options.name, - new L.Control.PMButton(_options) + new PMButton(_options) ); this.changeControlOrder(); return control; diff --git a/src/js/helpers/Matrix.js b/src/js/helpers/Matrix.js index 04b0c923..b32c9033 100644 --- a/src/js/helpers/Matrix.js +++ b/src/js/helpers/Matrix.js @@ -4,6 +4,8 @@ * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. */ +import { Point } from "leaflet"; + /** * @class L.PM.Matrix * @@ -25,8 +27,8 @@ Matrix.init = () => new L.PM.Matrix(1, 0, 0, 1, 0, 0); Matrix.prototype = { /** - * @param {L.Point} point - * @return {L.Point} + * @param {Point} point + * @return {Point} */ transform(point) { return this._transform(point.clone()); @@ -38,8 +40,8 @@ Matrix.prototype = { * [ x ] = [ a b tx ] [ x ] = [ a * x + b * y + tx ] * [ y ] = [ c d ty ] [ y ] = [ c * x + d * y + ty ] * - * @param {L.Point} point - * @return {L.Point} + * @param {Point} point + * @return {Point} */ _transform(point) { const matrix = this._matrix; @@ -50,12 +52,12 @@ Matrix.prototype = { }, /** - * @param {L.Point} point - * @return {L.Point} + * @param {Point} point + * @return {Point} */ untransform(point) { const matrix = this._matrix; - return new L.Point( + return new Point( (point.x / matrix[0] - matrix[4]) / matrix[0], (point.y / matrix[2] - matrix[5]) / matrix[2] ); @@ -77,12 +79,12 @@ Matrix.prototype = { }, /** - * @param {L.Point|Number} translate - * @return {L.PM.Matrix|L.Point} + * @param {Point|Number} translate + * @return {L.PM.Matrix|Point} */ translate(translate) { if (translate === undefined) { - return new L.Point(this._matrix[4], this._matrix[5]); + return new Point(this._matrix[4], this._matrix[5]); } let translateX; @@ -99,18 +101,18 @@ Matrix.prototype = { }, /** - * @param {L.Point|Number} scale - * @param {L.Point|Number} origin - * @return {L.PM.Matrix|L.Point} + * @param {Point|Number} scale + * @param {Point|Number} origin + * @return {L.PM.Matrix|Point} */ scale(scale, origin) { if (scale === undefined) { - return new L.Point(this._matrix[0], this._matrix[3]); + return new Point(this._matrix[0], this._matrix[3]); } let scaleX; let scaleY; - origin = origin || L.point(0, 0); + origin = origin || new Point(0, 0); if (typeof scale === 'number') { scaleX = scale; scaleY = scale; @@ -133,14 +135,14 @@ Matrix.prototype = { * m00 m01 x - m00 * x - m01 * y * m10 m11 y - m10 * x - m11 * y * @param {Number} angle - * @param {L.Point=} origin + * @param {Point=} origin * @return {L.PM.Matrix} */ rotate(angle, origin) { const cos = Math.cos(angle); const sin = Math.sin(angle); - origin = origin || new L.Point(0, 0); + origin = origin || new Point(0, 0); return this._add(cos, sin, -sin, cos, origin.x, origin.y)._add( 1, diff --git a/src/js/helpers/ModeHelper.js b/src/js/helpers/ModeHelper.js index b4403c5e..6fb11663 100644 --- a/src/js/helpers/ModeHelper.js +++ b/src/js/helpers/ModeHelper.js @@ -1,3 +1,5 @@ +import { LatLng, Layer, Util } from "leaflet"; + export function _convertLatLng(latlng, matrix, map, zoom) { return map.unproject(matrix.transform(map.project(latlng, zoom)), zoom); } @@ -7,21 +9,21 @@ export function _convertLatLngs(latlng, matrix, map) { if (zoom === Infinity) { zoom = map.getZoom(); } - if (L.Util.isArray(latlng)) { + if (Util.isArray(latlng)) { const latlngs = []; latlng.forEach((x) => { latlngs.push(_convertLatLngs(x, matrix, map)); }); return latlngs; } - if (latlng instanceof L.LatLng) { + if (latlng instanceof LatLng) { return _convertLatLng(latlng, matrix, map, zoom); } return null; } export function _toPoint(map, latlng) { - if (latlng instanceof L.Layer) { + if (latlng instanceof Layer) { latlng = latlng.getLatLng(); } let zoom = map.getMaxZoom(); diff --git a/src/js/helpers/index.js b/src/js/helpers/index.js index 4dcabbe5..22aa45cf 100644 --- a/src/js/helpers/index.js +++ b/src/js/helpers/index.js @@ -1,3 +1,4 @@ +import { Circle, CircleMarker, CRS, LatLng, Marker, Polygon, Polyline, Rectangle } from 'leaflet'; import get from 'lodash/get'; import translations from '../../assets/translations'; @@ -43,7 +44,7 @@ export function removeEmptyCoordRings(arr) { function destinationVincenty(lonlat, brng, dist) { // rewritten to work with leaflet const VincentyConstants = { - a: L.CRS.Earth.R, + a: CRS.Earth.R, b: 6356752.3142, f: 1 / 298.257223563, }; @@ -112,7 +113,7 @@ function destinationVincenty(lonlat, brng, dist) { const lamFunc = lon1 + (lam * 180) / pi; // converts lam radius to degrees const lat2a = (lat2 * 180) / pi; // converts lat2a radius to degrees - return L.latLng(lamFunc, lat2a); + return new LatLng(lamFunc, lat2a); } export function createGeodesicPolygon( @@ -131,11 +132,11 @@ export function createGeodesicPolygon( if (withBearing) { trueAngle = (i * 360) / sides + rotation; newLonlat = destinationVincenty(origin, trueAngle, radius); - geomPoint = L.latLng(newLonlat.lng, newLonlat.lat); + geomPoint = new LatLng(newLonlat.lng, newLonlat.lat); } else { const pLat = origin.lat + Math.cos((2 * i * Math.PI) / sides) * radius; const pLng = origin.lng + Math.sin((2 * i * Math.PI) / sides) * radius; - geomPoint = L.latLng(pLat, pLng); + geomPoint = new LatLng(pLat, pLng); } points.push(geomPoint); } @@ -143,12 +144,12 @@ export function createGeodesicPolygon( return points; } -/* Copied from L.GeometryUtil */ +/* Copied from GeometryUtil */ function destination(latlng, heading, distance) { heading = (heading + 360) % 360; const rad = Math.PI / 180; const radInv = 180 / Math.PI; - const { R } = L.CRS.Earth; // approximation of Earth's radius + const { R } = CRS.Earth; // approximation of Earth's radius const lon1 = latlng.lng * rad; const lat1 = latlng.lat * rad; const rheading = heading * rad; @@ -171,9 +172,9 @@ function destination(latlng, heading, distance) { const optB = lon2 < -180 ? lon2 + 360 : lon2; lon2 = lon2 > 180 ? optA : optB; - return L.latLng([lat2 * radInv, lon2]); + return new LatLng([lat2 * radInv, lon2]); } -/* Copied from L.GeometryUtil */ +/* Copied from GeometryUtil */ export function calcAngle(map, latlngA, latlngB) { const pointA = map.latLngToContainerPoint(latlngA); const pointB = map.latLngToContainerPoint(latlngB); @@ -208,22 +209,22 @@ export function prioritiseSort(key, _sortingOrder, order = 'asc') { } function getShape(layer) { - if (layer instanceof L.Marker) { + if (layer instanceof Marker) { return 'Marker'; } - if (layer instanceof L.Circle) { + if (layer instanceof Circle) { return 'Circle'; } - if (layer instanceof L.CircleMarker) { + if (layer instanceof CircleMarker) { return 'CircleMarker'; } - if (layer instanceof L.Rectangle) { + if (layer instanceof Rectangle) { return 'Rectangle'; } - if (layer instanceof L.Polygon) { + if (layer instanceof Polygon) { return 'Polygon'; } - if (layer instanceof L.Polyline) { + if (layer instanceof Polyline) { return 'Line'; } return undefined; @@ -257,10 +258,10 @@ export function prioritiseSort(key, _sortingOrder, order = 'asc') { } export function copyLatLngs(layer, latlngs = layer.getLatLngs()) { - if (layer instanceof L.Polygon) { - return L.polygon(latlngs).getLatLngs(); + if (layer instanceof Polygon) { + return new Polygon(latlngs).getLatLngs(); } - return L.polyline(latlngs).getLatLngs(); + return new Polyline(latlngs).getLatLngs(); } // Replaces the lat value with the MAX_LATITUDE of CRS if it is lower / higher diff --git a/src/js/helpers/turfHelper.js b/src/js/helpers/turfHelper.js index 258c8410..d52197fc 100644 --- a/src/js/helpers/turfHelper.js +++ b/src/js/helpers/turfHelper.js @@ -1,3 +1,4 @@ +import { LatLng, Polyline, Util } from 'leaflet'; import * as polygonClipping from 'polyclip-ts'; export function feature(geom) { @@ -19,8 +20,8 @@ export function getCoords(geojson) { export function turfPoint(coords, precision = -1) { if (precision > -1) { - coords[0] = L.Util.formatNum(coords[0], precision); - coords[1] = L.Util.formatNum(coords[1], precision); + coords[0] = Util.formatNum(coords[0], precision); + coords[1] = Util.formatNum(coords[1], precision); } return feature({ type: 'Point', coordinates: coords }); @@ -82,7 +83,7 @@ export function getDepthOfCoords(coords) { } export function flattenPolyline(polyline) { - if (polyline instanceof L.Polyline) { + if (polyline instanceof Polyline) { polyline = polyline.toGeoJSON(15); } @@ -110,7 +111,7 @@ export function groupToMultiLineString(group) { export function convertToLatLng(coords) { const lnglat = getCoords(coords); - return L.latLng(lnglat[1], lnglat[0]); + return new LatLng(lnglat[1], lnglat[0]); } export function convertArrayToLatLngs(arr) { From a0075a0357d3be8237d359aed0e7050dde3ecb14 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Tue, 20 May 2025 21:56:34 +0200 Subject: [PATCH 02/41] Fix css classlist --- src/js/Toolbar/L.Controls.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/Toolbar/L.Controls.js b/src/js/Toolbar/L.Controls.js index 04ffbacf..c4299d9c 100644 --- a/src/js/Toolbar/L.Controls.js +++ b/src/js/Toolbar/L.Controls.js @@ -229,7 +229,7 @@ const PMButton = Control.extend({ image.setAttribute('src', button.iconUrl); } if (button.className) { - image.classList.add(button.className); + image.classList.add(...button.className.split(' ')); } DomEvent.disableClickPropagation(newButton); From 3c4c49530f59dcb714972c81122cf17f24f70f32 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 17 Aug 2025 10:03:16 +0200 Subject: [PATCH 03/41] update pointer events & Utils --- src/js/Draw/L.PM.Draw.CircleMarker.js | 12 ++--- src/js/Draw/L.PM.Draw.Cut.js | 4 +- src/js/Draw/L.PM.Draw.Line.js | 10 ++-- src/js/Draw/L.PM.Draw.Marker.js | 8 ++-- src/js/Draw/L.PM.Draw.Rectangle.js | 10 ++-- src/js/Draw/L.PM.Draw.Text.js | 14 +++--- src/js/Edit/L.PM.Edit.Rectangle.js | 2 +- src/js/Edit/L.PM.Edit.Text.js | 8 ++-- src/js/Mixins/Dragging.js | 66 +++++++++++++-------------- src/js/Mixins/MarkerLimits.js | 6 +-- src/js/Mixins/Rotating.js | 2 +- src/js/Mixins/Snapping.js | 2 +- src/js/Toolbar/L.Controls.js | 13 +++--- src/js/helpers/ModeHelper.js | 2 +- 14 files changed, 80 insertions(+), 79 deletions(-) diff --git a/src/js/Draw/L.PM.Draw.CircleMarker.js b/src/js/Draw/L.PM.Draw.CircleMarker.js index 05f01e42..9c6f630a 100644 --- a/src/js/Draw/L.PM.Draw.CircleMarker.js +++ b/src/js/Draw/L.PM.Draw.CircleMarker.js @@ -1,4 +1,4 @@ -import { CircleMarker, DivIcon, DomUtil, FeatureGroup, Marker, Point, Util } from 'leaflet'; +import { CircleMarker, DivIcon, Polyline, Circle, FeatureGroup, Marker, Point, Util } from 'leaflet'; import { destinationOnLine, getTranslation } from '../helpers'; import Draw from './L.PM.Draw'; @@ -63,7 +63,7 @@ Draw.CircleMarker = Draw.extend({ this._setPane(this._centerMarker, 'vertexPane'); this._centerMarker._pmTempLayer = true; - // this is the hintmarker on the mouse cursor + // this is the hintmarker on the pointer cursor this._hintMarker = new Marker(this._map.getCenter(), { zIndexOffset: 110, icon: new DivIcon({ className: 'marker-icon cursor-marker' }), @@ -101,7 +101,7 @@ Draw.CircleMarker = Draw.extend({ // create a marker on click on the map this._map.on('click', this._createMarker, this); - // this is the hintmarker on the mouse cursor + // this is the hintmarker on the pointer cursor this._hintMarker = new this._BaseCircleClass(this._map.getCenter(), { radius: this._defaultRadius, ...this.options.templineStyle, @@ -126,8 +126,8 @@ Draw.CircleMarker = Draw.extend({ } } - // sync hint marker with mouse cursor - this._map.on('mousemove', this._syncHintMarker, this); + // sync hint marker with pointer cursor + this._map.on('pointermove', this._syncHintMarker, this); this._extendingEnable(); @@ -182,7 +182,7 @@ Draw.CircleMarker = Draw.extend({ } // remove event listener to sync hint marker - this._map.off('mousemove', this._syncHintMarker, this); + this._map.off('pointermove', this._syncHintMarker, this); // toggle the draw button of the Toolbar in case drawing mode got disabled without the button this._map.pm.Toolbar.toggleButton(this.toolbarButtonName, false); diff --git a/src/js/Draw/L.PM.Draw.Cut.js b/src/js/Draw/L.PM.Draw.Cut.js index 401a6bb9..3b8b6375 100644 --- a/src/js/Draw/L.PM.Draw.Cut.js +++ b/src/js/Draw/L.PM.Draw.Cut.js @@ -108,7 +108,7 @@ Draw.Cut = Draw.Polygon.extend({ // TODO: after cutting nothing else can be cutted anymore until a new list is passed, because the layers don't exists anymore. Should we remove the cutted layers from the list? if ( this.options.layersToCut && - Util.isArray(this.options.layersToCut) && + Array.isArray(this.options.layersToCut) && this.options.layersToCut.length > 0 ) { return this.options.layersToCut.indexOf(l) > -1; @@ -219,7 +219,7 @@ Draw.Cut = Draw.Polygon.extend({ if ( this.options.layersToCut && - Util.isArray(this.options.layersToCut) && + Array.isArray(this.options.layersToCut) && this.options.layersToCut.length > 0 ) { const idx = this.options.layersToCut.indexOf(l); diff --git a/src/js/Draw/L.PM.Draw.Line.js b/src/js/Draw/L.PM.Draw.Line.js index b61edb8f..cdd6ec50 100644 --- a/src/js/Draw/L.PM.Draw.Line.js +++ b/src/js/Draw/L.PM.Draw.Line.js @@ -33,13 +33,13 @@ Draw.Line = Draw.extend({ this._layer._pmTempLayer = true; this._layerGroup.addLayer(this._layer); - // this is the hintline from the mouse cursor to the last marker + // this is the hintline from the pointer cursor to the last marker this._hintline = new Polyline([], this.options.hintlineStyle); this._setPane(this._hintline, 'layerPane'); this._hintline._pmTempLayer = true; this._layerGroup.addLayer(this._hintline); - // this is the hintmarker on the mouse cursor + // this is the hintmarker on the pointer cursor this._hintMarker = new Marker(this._map.getCenter(), { interactive: false, // always vertex marker below will be triggered from the click event -> _finishShape #911 zIndexOffset: 100, @@ -88,8 +88,8 @@ Draw.Line = Draw.extend({ } } - // sync hint marker with mouse cursor - this._map.on('mousemove', this._syncHintMarker, this); + // sync hint marker with pointer cursor + this._map.on('pointermove', this._syncHintMarker, this); // sync the hintline with hint marker this._hintMarker.on('move', this._syncHintLine, this); @@ -123,7 +123,7 @@ Draw.Line = Draw.extend({ // unbind listeners this._map.off('click', this._createVertex, this); - this._map.off('mousemove', this._syncHintMarker, this); + this._map.off('pointermove', this._syncHintMarker, this); if (this.options.finishOn && this.options.finishOn !== 'snap') { this._map.off(this.options.finishOn, this._finishShape, this); } diff --git a/src/js/Draw/L.PM.Draw.Marker.js b/src/js/Draw/L.PM.Draw.Marker.js index b077541d..ff16c374 100644 --- a/src/js/Draw/L.PM.Draw.Marker.js +++ b/src/js/Draw/L.PM.Draw.Marker.js @@ -27,7 +27,7 @@ Draw.Marker = Draw.extend({ // toggle the draw button of the Toolbar in case drawing mode got enabled without the button this._map.pm.Toolbar.toggleButton(this.toolbarButtonName, true); - // this is the hintmarker on the mouse cursor + // this is the hintmarker on the pointer cursor this._hintMarker = new Marker( this._map.getCenter(), this.options.markerStyle @@ -52,8 +52,8 @@ Draw.Marker = Draw.extend({ // this is just to keep the snappable mixin happy this._layer = this._hintMarker; - // sync hint marker with mouse cursor - this._map.on('mousemove', this._syncHintMarker, this); + // sync hint marker with pointer cursor + this._map.on('pointermove', this._syncHintMarker, this); // enable edit mode for existing markers if (this.options.markerEditable) { @@ -87,7 +87,7 @@ Draw.Marker = Draw.extend({ this._hintMarker.remove(); // remove event listener to sync hint marker - this._map.off('mousemove', this._syncHintMarker, this); + this._map.off('pointermove', this._syncHintMarker, this); // disable dragging and removing for all markers this._map.eachLayer((layer) => { diff --git a/src/js/Draw/L.PM.Draw.Rectangle.js b/src/js/Draw/L.PM.Draw.Rectangle.js index f5e958cf..cca1aef6 100644 --- a/src/js/Draw/L.PM.Draw.Rectangle.js +++ b/src/js/Draw/L.PM.Draw.Rectangle.js @@ -44,7 +44,7 @@ Draw.Rectangle = Draw.extend({ this._startMarker._pmTempLayer = true; this._layerGroup.addLayer(this._startMarker); - // this is the hintmarker on the mouse cursor + // this is the hintmarker on the pointer cursor this._hintMarker = new Marker(this._map.getCenter(), { zIndexOffset: 150, icon: new DivIcon({ className: 'marker-icon cursor-marker' }), @@ -96,8 +96,8 @@ Draw.Rectangle = Draw.extend({ // create a polygon-point on click this._map.on('click', this._placeStartingMarkers, this); - // sync hint marker with mouse cursor - this._map.on('mousemove', this._syncHintMarker, this); + // sync hint marker with pointer cursor + this._map.on('pointermove', this._syncHintMarker, this); // toggle the draw button of the Toolbar in case drawing mode got enabled without the button this._map.pm.Toolbar.toggleButton(this.toolbarButtonName, true); @@ -126,7 +126,7 @@ Draw.Rectangle = Draw.extend({ // unbind listeners this._map.off('click', this._finishShape, this); this._map.off('click', this._placeStartingMarkers, this); - this._map.off('mousemove', this._syncHintMarker, this); + this._map.off('pointermove', this._syncHintMarker, this); // remove helping layers this._map.removeLayer(this._layerGroup); @@ -241,7 +241,7 @@ Draw.Rectangle = Draw.extend({ try { this._styleMarkers[index].setLatLng(unmarkedCorner); } catch (e) { - // ignore error - should be fixed with the next mousemove + // ignore error - should be fixed with the next pointermove } }); } diff --git a/src/js/Draw/L.PM.Draw.Text.js b/src/js/Draw/L.PM.Draw.Text.js index b8d5bc3e..18bffefb 100644 --- a/src/js/Draw/L.PM.Draw.Text.js +++ b/src/js/Draw/L.PM.Draw.Text.js @@ -22,7 +22,7 @@ Draw.Text = Draw.extend({ // toggle the draw button of the Toolbar in case drawing mode got enabled without the button this._map.pm.Toolbar.toggleButton(this.toolbarButtonName, true); - // this is the hintmarker on the mouse cursor + // this is the hintmarker on the pointer cursor this._hintMarker = new Marker(this._map.getCenter(), { interactive: false, zIndexOffset: 100, @@ -53,8 +53,8 @@ Draw.Text = Draw.extend({ // this is just to keep the snappable mixin happy this._layer = this._hintMarker; - // sync hint marker with mouse cursor - this._map.on('mousemove', this._syncHintMarker, this); + // sync hint marker with pointer cursor + this._map.on('pointermove', this._syncHintMarker, this); this._map.getContainer().classList.add('geoman-draw-cursor'); @@ -80,9 +80,9 @@ Draw.Text = Draw.extend({ this._map.getContainer().classList.remove('geoman-draw-cursor'); // remove event listener to sync hint marker - this._map.off('mousemove', this._syncHintMarker, this); + this._map.off('pointermove', this._syncHintMarker, this); - this._map.off('mousemove', this._showHintMarker, this); + this._map.off('pointermove', this._showHintMarker, this); // toggle the draw button of the Toolbar in case drawing mode got disabled without the button this._map.pm.Toolbar.toggleButton(this.toolbarButtonName, false); @@ -184,8 +184,8 @@ Draw.Text = Draw.extend({ // disable drawing this.disable(); if (this.options.continueDrawing) { - // the user is still typing some text, so we re-enable the layer after moving the mouse - this._map.once('mousemove', this._showHintMarkerAfterMoving, this); + // the user is still typing some text, so we re-enable the layer after moving the pointer + this._map.once('pointermove', this._showHintMarkerAfterMoving, this); } }, diff --git a/src/js/Edit/L.PM.Edit.Rectangle.js b/src/js/Edit/L.PM.Edit.Rectangle.js index a20a8bcd..e1e7a83a 100644 --- a/src/js/Edit/L.PM.Edit.Rectangle.js +++ b/src/js/Edit/L.PM.Edit.Rectangle.js @@ -161,7 +161,7 @@ Edit.Rectangle = Edit.Polygon.extend({ // params: movedMarker -- the Marker object _adjustRectangleForMarkerMove(movedMarker) { // update moved marker coordinates - Util.extend(movedMarker._origLatLng, movedMarker._latlng); + Object.assign(movedMarker._origLatLng, movedMarker._latlng); // update rectangle boundaries, based on moved marker's new LatLng and cached opposite corner's LatLng const corners = L.PM.Utils._getRotatedRectangle( diff --git a/src/js/Edit/L.PM.Edit.Text.js b/src/js/Edit/L.PM.Edit.Text.js index eb23696f..ee545d6e 100644 --- a/src/js/Edit/L.PM.Edit.Text.js +++ b/src/js/Edit/L.PM.Edit.Text.js @@ -40,7 +40,7 @@ Edit.Text = Edit.extend({ DomEvent.on(this.textArea, 'blur', this._focusChange, this); this._layer.on('dblclick', DomEvent.stop); - DomEvent.off(this.textArea, 'mousedown', this._preventTextSelection); + DomEvent.off(this.textArea, 'pointerdown', this._preventTextSelection); this._enabled = true; @@ -71,7 +71,7 @@ Edit.Text = Edit.extend({ this.textArea.focus(); this.textArea.selectionStart = 0; this.textArea.selectionEnd = 0; - DomEvent.on(this.textArea, 'mousedown', this._preventTextSelection); + DomEvent.on(this.textArea, 'pointerdown', this._preventTextSelection); focusedElement.focus(); this._disableOnBlurActive = false; @@ -184,7 +184,7 @@ Edit.Text = Edit.extend({ // save current map dragging state if (this._safeToCacheDragState) { this._originalMapDragState = this._map.dragging._enabled; - // don't cache the state again until another mouse up is registered + // don't cache the state again until another pointer up is registered this._safeToCacheDragState = false; } this._map.dragging.disable(); @@ -259,7 +259,7 @@ Edit.Text = Edit.extend({ this.textArea.wrap = 'off'; this.textArea.style.overflow = 'hidden'; - this.textArea.style.height = DomUtil.getStyle(this.textArea, 'font-size'); + this.textArea.style.height = getComputedStyle(this.textArea).fontSize; this.textArea.style.width = '1px'; if (this._layer.options.text) { diff --git a/src/js/Mixins/Dragging.js b/src/js/Mixins/Dragging.js index 6c7cc9e5..73301630 100644 --- a/src/js/Mixins/Dragging.js +++ b/src/js/Mixins/Dragging.js @@ -36,8 +36,8 @@ const DragMixin = { // add CSS class if (getRenderer(this._layer) instanceof Canvas) { - this._layer.on('mouseout', this.removeDraggingClass, this); - this._layer.on('mouseover', this.addDraggingClass, this); + this._layer.on('pointerout', this.removeDraggingClass, this); + this._layer.on('pointerover', this.addDraggingClass, this); } else { this.addDraggingClass(); } @@ -45,27 +45,27 @@ const DragMixin = { this._originalMapDragState = this._layer._map.dragging._enabled; // can we reliably save the map's draggable state? - // (if the mouse up event happens outside the container, then the map can become undraggable) + // (if the pointer up event happens outside the container, then the map can become undraggable) this._safeToCacheDragState = true; const container = this._getDOMElem(); // check if DOM element exists if (container) { - // add mousedown event to trigger drag + // add pointerdown event to trigger drag if (getRenderer(this._layer) instanceof Canvas) { this._layer.on( - 'touchstart mousedown', + 'touchstart pointerdown', this._dragMixinOnMouseDown, this ); this._map.pm._addTouchEvents(container); } else { - // We can't just use layer.on('mousedown') because on touch devices the event is not fired if user presses on the layer and then drag it. - // With checking on touchstart and mousedown on the DOM element we can listen on the needed events + // We can't just use layer.on('pointerdown') because on touch devices the event is not fired if user presses on the layer and then drag it. + // With checking on touchstart and pointerdown on the DOM element we can listen on the needed events DomEvent.on( container, - 'touchstart mousedown', + 'touchstart pointerdown', this._simulateMouseDownEvent, this ); @@ -79,8 +79,8 @@ const DragMixin = { // remove CSS class if (getRenderer(this._layer) instanceof Canvas) { - this._layer.off('mouseout', this.removeDraggingClass, this); - this._layer.off('mouseover', this.addDraggingClass, this); + this._layer.off('pointerout', this.removeDraggingClass, this); + this._layer.off('pointerover', this.addDraggingClass, this); } else { this.removeDraggingClass(); } @@ -103,16 +103,16 @@ const DragMixin = { if (container) { if (getRenderer(this._layer) instanceof Canvas) { this._layer.off( - 'touchstart mousedown', + 'touchstart pointerdown', this._dragMixinOnMouseDown, this ); this._map.pm._removeTouchEvents(container); } else { - // disable mousedown event + // disable pointerdown event DomEvent.off( container, - 'touchstart mousedown', + 'touchstart pointerdown', this._simulateMouseDownEvent, this ); @@ -133,8 +133,8 @@ const DragMixin = { layerDragEnabled() { return !!this._layerDragEnabled; }, - // We need to simulate a mousedown event on the layer object. We can't just use layer.on('mousedown') because on touch devices the event is not fired if user presses on the layer and then drag it. - // With checking on touchstart and mousedown on the DOM element we can listen on the needed events + // We need to simulate a pointerdown event on the layer object. We can't just use layer.on('pointerdown') because on touch devices the event is not fired if user presses on the layer and then drag it. + // With checking on touchstart and pointerdown on the DOM element we can listen on the needed events _simulateMouseDownEvent(e) { const first = e.touches ? e.touches[0] : e; const evt = { @@ -142,7 +142,7 @@ const DragMixin = { target: this._layer, }; // we expect in the function to get the clicked latlng / point - evt.containerPoint = this._map.mouseEventToContainerPoint(first); + evt.containerPoint = this._map.pointerEventToContainerPoint(first); evt.latlng = this._map.containerPointToLatLng(evt.containerPoint); this._dragMixinOnMouseDown(evt); @@ -155,7 +155,7 @@ const DragMixin = { target: this._layer, }; // we expect in the function to get the clicked latlng / point - evt.containerPoint = this._map.mouseEventToContainerPoint(first); + evt.containerPoint = this._map.pointerEventToContainerPoint(first); evt.latlng = this._map.containerPointToLatLng(evt.containerPoint); this._dragMixinOnMouseMove(evt); @@ -169,14 +169,14 @@ const DragMixin = { }; if (e.type.indexOf('touch') === -1) { // we expect in the function to get the clicked latlng / point - evt.containerPoint = this._map.mouseEventToContainerPoint(e); + evt.containerPoint = this._map.pointerEventToContainerPoint(e); evt.latlng = this._map.containerPointToLatLng(evt.containerPoint); } this._dragMixinOnMouseUp(evt); return false; }, _dragMixinOnMouseDown(e) { - // cancel if mouse button is NOT the left button + // cancel if pointer button is NOT the left button if (e.originalEvent.button > 0) { return; } @@ -217,7 +217,7 @@ const DragMixin = { if (this._safeToCacheDragState) { this._originalMapDragState = this._layer._map.dragging._enabled; - // don't cache the state again until another mouse up is registered + // don't cache the state again until another pointer up is registered this._safeToCacheDragState = false; } @@ -226,16 +226,16 @@ const DragMixin = { DomEvent.on( this._map.getContainer(), - 'touchend mouseup', + 'touchend pointerup', this._simulateMouseUpEvent, this ); - // listen to mousemove on map (instead of polygon), - // otherwise fast mouse movements stop the drag + // listen to pointermove on map (instead of polygon), + // otherwise fast pointer movements stop the drag DomEvent.on( this._map.getContainer(), - 'touchmove mousemove', + 'touchmove pointermove', this._simulateMouseMoveEvent, this ); @@ -287,20 +287,20 @@ const DragMixin = { this._map.dragging.enable(); } - // if mouseup event fired, it's safe to cache the map draggable state on the next mouse down + // if pointerup event fired, it's safe to cache the map draggable state on the next pointer down this._safeToCacheDragState = true; - // clear up mousemove event + // clear up pointermove event DomEvent.off( this._map.getContainer(), - 'touchmove mousemove', + 'touchmove pointermove', this._simulateMouseMoveEvent, this ); - // clear up mouseup event + // clear up pointerup event DomEvent.off( this._map.getContainer(), - 'touchend mouseup', + 'touchend pointerup', this._simulateMouseUpEvent, this ); @@ -338,7 +338,7 @@ const DragMixin = { return true; }, _onLayerDrag(e) { - // latLng of mouse event + // latLng of pointer event const { latlng } = e; // delta coords (how far was dragged) @@ -450,7 +450,7 @@ const DragMixin = { e.target.getLatLng && (!e.target._radius || e.target._radius <= 10); if (isMarker) { // we want the clicked latlng / point, so we overwrite the property e.latlng - e.containerPoint = this._map.mouseEventToContainerPoint(e.originalEvent); + e.containerPoint = this._map.pointerEventToContainerPoint(e.originalEvent); e.latlng = this._map.containerPointToLatLng(e.containerPoint); } }, @@ -467,7 +467,7 @@ const DragMixin = { ) { e._fromLayerSync = true; let layersToSync = []; - if (Util.isArray(this.options.syncLayersOnDrag)) { + if (Array.isArray(this.options.syncLayersOnDrag)) { // layers layersToSync = this.options.syncLayersOnDrag; @@ -488,7 +488,7 @@ const DragMixin = { } } - if (Util.isArray(layersToSync) && layersToSync.length > 0) { + if (Array.isArray(layersToSync) && layersToSync.length > 0) { // filter out layers that don't have leaflet-geoman and not allowed to drag layersToSync = layersToSync .filter((layer) => !!layer.pm) diff --git a/src/js/Mixins/MarkerLimits.js b/src/js/Mixins/MarkerLimits.js index 1d01c182..70466559 100644 --- a/src/js/Mixins/MarkerLimits.js +++ b/src/js/Mixins/MarkerLimits.js @@ -24,17 +24,17 @@ const MarkerLimits = { this._layer.on('pm:disable', this._removeMarkerLimitEvents, this); this._layer.on('remove', this._removeMarkerLimitEvents, this); - // add markers closest to the mouse + // add markers closest to the pointer if (this.options.limitMarkersToCount > -1) { // re-init markers when a vertex is removed. // The reason is that syncing this cache with a removed marker was impossible to do this._layer.on('pm:vertexremoved', this._initMarkers, this); - this._map.on('mousemove', this.throttledApplyLimitFilters, this); + this._map.on('pointermove', this.throttledApplyLimitFilters, this); } }, _removeMarkerLimitEvents() { - this._map.off('mousemove', this.throttledApplyLimitFilters, this); + this._map.off('pointermove', this.throttledApplyLimitFilters, this); this._layer.off('pm:edit', this.createCache, this); this._layer.off('pm:disable', this._removeMarkerLimitEvents, this); this._layer.off('pm:vertexremoved', this._initMarkers, this); diff --git a/src/js/Mixins/Rotating.js b/src/js/Mixins/Rotating.js index eaa39397..1c427124 100644 --- a/src/js/Mixins/Rotating.js +++ b/src/js/Mixins/Rotating.js @@ -55,7 +55,7 @@ const RotateMixin = { if (_i > -1) { path.push(_i); } - if (Util.isArray(latlng[0])) { + if (Array.isArray(latlng[0])) { latlng.forEach((x, i) => forEachLatLng(x, path.slice(), i)); } else { const markers = diff --git a/src/js/Mixins/Snapping.js b/src/js/Mixins/Snapping.js index f472e71e..7876730c 100644 --- a/src/js/Mixins/Snapping.js +++ b/src/js/Mixins/Snapping.js @@ -336,7 +336,7 @@ const SnapMixin = { // return the closest layer and it's data // if there is no closest layer, return an empty object const result = this._getClosestLayerByPriority(closestLayers, amount); - if (Util.isArray(result)) { + if (Array.isArray(result)) { return result; } return [result]; diff --git a/src/js/Toolbar/L.Controls.js b/src/js/Toolbar/L.Controls.js index c4299d9c..53f19194 100644 --- a/src/js/Toolbar/L.Controls.js +++ b/src/js/Toolbar/L.Controls.js @@ -11,7 +11,8 @@ const PMButton = Control.extend({ // TODO: clean up variable names like _button should be _options and that domNodeVariable stuff initialize(options) { // replaced setOptions with this because classNames returned undefined 🤔 - this._button = Object.assign({}, this.options, options); + this._button = {}; + Object.assign(this._button, this.options, options); }, onAdd(map) { this._map = map; @@ -208,9 +209,9 @@ const PMButton = Control.extend({ this._fireActionClick(action, btnName, button); }; - DomEvent.addListener(actionNode, 'click', actionClick, this); - DomEvent.addListener(actionNode, 'click', action.onClick, this); - DomEvent.addListener(actionNode, 'click', () => + DomEvent.on(actionNode, 'click', actionClick, this); + DomEvent.on(actionNode, 'click', action.onClick, this); + DomEvent.on(actionNode, 'click', () => this._updateActiveAction(button) ); } @@ -238,8 +239,8 @@ const PMButton = Control.extend({ if (!button.disabled) { // before the actual click, trigger a click on currently toggled buttons to // untoggle them and their functionality - DomEvent.addListener(newButton, 'click', this._onBtnClick, this); - DomEvent.addListener(newButton, 'click', this._triggerClick, this); + DomEvent.on(newButton, 'click', this._onBtnClick, this); + DomEvent.on(newButton, 'click', this._triggerClick, this); } if (button.disabled) { diff --git a/src/js/helpers/ModeHelper.js b/src/js/helpers/ModeHelper.js index 6fb11663..ec8a66c2 100644 --- a/src/js/helpers/ModeHelper.js +++ b/src/js/helpers/ModeHelper.js @@ -9,7 +9,7 @@ export function _convertLatLngs(latlng, matrix, map) { if (zoom === Infinity) { zoom = map.getZoom(); } - if (Util.isArray(latlng)) { + if (Array.isArray(latlng)) { const latlngs = []; latlng.forEach((x) => { latlngs.push(_convertLatLngs(x, matrix, map)); From 40fa83407c4ed1bbc994f3bc298f512d8a7d82b9 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 17 Aug 2025 13:40:00 +0200 Subject: [PATCH 04/41] Update imports --- bundle.mjs | 2 + package.json | 6 +- pnpm-lock.yaml | 27 ++++---- src/js/Draw/L.PM.Draw.CircleMarker.js | 5 +- src/js/Draw/L.PM.Draw.Cut.js | 8 ++- src/js/Draw/L.PM.Draw.Line.js | 5 +- src/js/Draw/L.PM.Draw.Polygon.js | 2 +- src/js/Draw/L.PM.Draw.Rectangle.js | 9 +-- src/js/Draw/L.PM.Draw.Text.js | 2 +- src/js/Draw/L.PM.Draw.js | 11 ++-- src/js/Edit/L.PM.Edit.Circle.js | 8 +-- src/js/Edit/L.PM.Edit.CircleMarker.js | 13 ++-- src/js/Edit/L.PM.Edit.LayerGroup.js | 5 +- src/js/Edit/L.PM.Edit.Line.js | 27 ++++---- src/js/Edit/L.PM.Edit.Rectangle.js | 13 ++-- src/js/Edit/L.PM.Edit.Text.js | 7 +- src/js/L.PM.Map.js | 20 +++--- src/js/L.PM.Utils.js | 5 +- src/js/L.PM.js | 92 ++++++++++++++------------- src/js/Mixins/Dragging.js | 2 +- src/js/Mixins/Events.js | 3 +- src/js/Mixins/Modes/Mode.Drag.js | 10 +-- src/js/Mixins/Modes/Mode.Edit.js | 10 +-- src/js/Mixins/Modes/Mode.Removal.js | 5 +- src/js/Mixins/Modes/Mode.Rotate.js | 10 +-- src/js/Mixins/Rotating.js | 13 ++-- src/js/Mixins/Snapping.js | 8 ++- src/js/Toolbar/L.Controls.js | 8 ++- src/js/helpers/Matrix.js | 7 +- src/js/helpers/ModeHelper.js | 2 +- src/js/helpers/index.js | 4 +- 31 files changed, 190 insertions(+), 159 deletions(-) diff --git a/bundle.mjs b/bundle.mjs index 745831ae..998a02d4 100644 --- a/bundle.mjs +++ b/bundle.mjs @@ -24,6 +24,8 @@ const buildOptions = { minify: true, outfile: './dist/leaflet-geoman.js', sourcemap: true, + format: 'esm', + external: ['leaflet'], } const ctx = await esbuild.context({ ...buildOptions, plugins }); diff --git a/package.json b/package.json index 76e5aaba..10752577 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "polyclip-ts": "^0.16.5" }, "devDependencies": { - "@types/leaflet": "^1.9.12", + "@types/leaflet": "^1.9.20", "cross-env": "^7.0.3", "cypress": "^13.11.0", "esbuild": "^0.20.2", @@ -39,14 +39,14 @@ "eslint-plugin-cypress": "2.15.1", "eslint-plugin-import": "2.29.1", "husky": "^9.0.11", - "leaflet": "2.0.0-alpha", + "leaflet": "2.0.0-alpha.1", "lint-staged": "^15.2.5", "prettier": "3.2.4", "prosthetic-hand": "1.3.1", "ts-node": "^10.9.2" }, "peerDependencies": { - "leaflet": "^1.2.0" + "leaflet": "^2.0.0-alpha.1" }, "scripts": { "start": "pnpm run dev", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9f7bb05a..59070e51 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,8 +28,8 @@ importers: version: 0.16.5 devDependencies: '@types/leaflet': - specifier: ^1.9.12 - version: 1.9.14 + specifier: ^1.9 + version: 1.9.20 cross-env: specifier: ^7.0.3 version: 7.0.3 @@ -58,8 +58,8 @@ importers: specifier: ^9.0.11 version: 9.0.11 leaflet: - specifier: 2.0.0-alpha - version: 2.0.0-alpha + specifier: 2.0.0-alpha.1 + version: 2.0.0-alpha.1 lint-staged: specifier: ^15.2.5 version: 15.2.10 @@ -346,17 +346,14 @@ packages: '@turf/truncate@6.5.0': resolution: {integrity: sha512-pFxg71pLk+eJj134Z9yUoRhIi8vqnnKvCYwdT4x/DQl/19RVdq1tV3yqOT3gcTQNfniteylL5qV1uTBDV5sgrg==} - '@types/geojson@7946.0.13': - resolution: {integrity: sha512-bmrNrgKMOhM3WsafmbGmC+6dsF2Z308vLFsQ3a/bT8X8Sv5clVYpPars/UPq+sAaJP+5OoLAYgwbkS5QEJdLUQ==} - '@types/geojson@7946.0.8': resolution: {integrity: sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==} '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/leaflet@1.9.14': - resolution: {integrity: sha512-sx2q6MDJaajwhKeVgPSvqXd8rhNJSTA3tMidQGduZn9S6WBYxDkCpSpV5xXEmSg7Cgdk/5vJGhVF1kMYLzauBg==} + '@types/leaflet@1.9.20': + resolution: {integrity: sha512-rooalPMlk61LCaLOvBF2VIf9M47HgMQqi5xQ9QRi7c8PkdIe0WrIi5IxXUXQjAdL0c+vcQ01mYWbthzmp9GHWw==} '@types/node@20.11.10': resolution: {integrity: sha512-rZEfe/hJSGYmdfX9tvcPMYeYPW2sNl50nsw4jZmRcaG0HIAb0WYEpsB05GOb53vjqpyE9GUhlDQ4jLSoB5q9kg==} @@ -1212,8 +1209,8 @@ packages: resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==} engines: {node: '> 0.8'} - leaflet@2.0.0-alpha: - resolution: {integrity: sha512-RnEJ3UYcuHPFFsDq0e2/QovyIaR3hhwiQpq3wrKnvprA/lsiAJpcxvkRZL3UwQ2xnKm1r2pYcMa+rcSKVwEQag==} + leaflet@2.0.0-alpha.1: + resolution: {integrity: sha512-2EJU27z/wljOgQCyybRkfrm5Xc3uy6huKehh0UAPsrAdwnSMxaplsqCl9cXPAuDm6D7uL6PCznYMDVIsaAdSdA==} levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} @@ -2081,15 +2078,13 @@ snapshots: '@turf/helpers': 6.5.0 '@turf/meta': 6.5.0 - '@types/geojson@7946.0.13': {} - '@types/geojson@7946.0.8': {} '@types/json5@0.0.29': {} - '@types/leaflet@1.9.14': + '@types/leaflet@1.9.20': dependencies: - '@types/geojson': 7946.0.13 + '@types/geojson': 7946.0.8 '@types/node@20.11.10': dependencies: @@ -3072,7 +3067,7 @@ snapshots: lazy-ass@1.6.0: {} - leaflet@2.0.0-alpha: {} + leaflet@2.0.0-alpha.1: {} levn@0.4.1: dependencies: diff --git a/src/js/Draw/L.PM.Draw.CircleMarker.js b/src/js/Draw/L.PM.Draw.CircleMarker.js index 9c6f630a..961ce62f 100644 --- a/src/js/Draw/L.PM.Draw.CircleMarker.js +++ b/src/js/Draw/L.PM.Draw.CircleMarker.js @@ -1,6 +1,7 @@ import { CircleMarker, DivIcon, Polyline, Circle, FeatureGroup, Marker, Point, Util } from 'leaflet'; import { destinationOnLine, getTranslation } from '../helpers'; import Draw from './L.PM.Draw'; +import Utils from '../L.PM.Utils'; Draw.CircleMarker = Draw.extend({ initialize(map) { @@ -454,14 +455,14 @@ Draw.CircleMarker = Draw.extend({ return secondLatLng; }, _getMinDistanceInMeter() { - return L.PM.Utils.pxRadiusToMeterRadius( + return Utils.pxRadiusToMeterRadius( this.options[this._minRadiusOption], this._map, this._centerMarker.getLatLng() ); }, _getMaxDistanceInMeter() { - return L.PM.Utils.pxRadiusToMeterRadius( + return Utils.pxRadiusToMeterRadius( this.options[this._maxRadiusOption], this._map, this._centerMarker.getLatLng() diff --git a/src/js/Draw/L.PM.Draw.Cut.js b/src/js/Draw/L.PM.Draw.Cut.js index 3b8b6375..de6daa05 100644 --- a/src/js/Draw/L.PM.Draw.Cut.js +++ b/src/js/Draw/L.PM.Draw.Cut.js @@ -10,6 +10,8 @@ import { intersect, } from '../helpers/turfHelper'; import Draw from './L.PM.Draw'; +import Geoman from '../L.PM'; +import Utils from '../L.PM.Utils'; Draw.Cut = Draw.Polygon.extend({ initialize(map) { @@ -94,8 +96,8 @@ Draw.Cut = Draw.Polygon.extend({ // filter out everything that ignore leaflet-geoman .filter( (l) => - (!L.PM.optIn && !l.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) - (L.PM.optIn && l.options.pmIgnore === false) // if optIn is true and pmIgnore is false); + (!Geoman.optIn && !l.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) + (Geoman.optIn && l.options.pmIgnore === false) // if optIn is true and pmIgnore is false); ) // only polyline instances .filter((l) => l instanceof Polyline) @@ -163,7 +165,7 @@ Draw.Cut = Draw.Polygon.extend({ const { segment } = closest; if (segment && segment.length === 2) { const { indexPath, parentPath, newIndex } = - L.PM.Utils._getIndexFromSegment(coords, segment); + Utils._getIndexFromSegment(coords, segment); // define the coordsRing that is edited const coordsRing = indexPath.length > 1 ? get(coords, parentPath) : coords; diff --git a/src/js/Draw/L.PM.Draw.Line.js b/src/js/Draw/L.PM.Draw.Line.js index cdd6ec50..44f0a7c2 100644 --- a/src/js/Draw/L.PM.Draw.Line.js +++ b/src/js/Draw/L.PM.Draw.Line.js @@ -1,8 +1,9 @@ import kinks from '@turf/kinks'; import Draw from './L.PM.Draw'; -import { DivIcon, DomUtil, FeatureGroup, Marker, Point, Polyline, Util } from 'leaflet'; +import { DivIcon, FeatureGroup, Marker, Point, Polyline, Util } from 'leaflet'; import { getTranslation } from '../helpers'; +import Utils from '../L.PM.Utils'; Draw.Line = Draw.extend({ initialize(map) { @@ -308,7 +309,7 @@ Draw.Line = Draw.extend({ const removedMarker = markers[markers.length - 1]; // the index path to the marker inside the multidimensional marker array - const { indexPath } = L.PM.Utils.findDeepMarkerIndex( + const { indexPath } = Utils.findDeepMarkerIndex( markers, removedMarker ); diff --git a/src/js/Draw/L.PM.Draw.Polygon.js b/src/js/Draw/L.PM.Draw.Polygon.js index b9962ec6..352d5d4e 100644 --- a/src/js/Draw/L.PM.Draw.Polygon.js +++ b/src/js/Draw/L.PM.Draw.Polygon.js @@ -9,7 +9,7 @@ Draw.Polygon = Draw.Line.extend({ this.toolbarButtonName = 'drawPolygon'; }, enable(options) { - L.PM.Draw.Line.prototype.enable.call(this, options); + Draw.Line.prototype.enable.call(this, options); // Overwrite the shape "Line" of this._layer this._layer.pm._shape = 'Polygon'; }, diff --git a/src/js/Draw/L.PM.Draw.Rectangle.js b/src/js/Draw/L.PM.Draw.Rectangle.js index cca1aef6..8ec5af09 100644 --- a/src/js/Draw/L.PM.Draw.Rectangle.js +++ b/src/js/Draw/L.PM.Draw.Rectangle.js @@ -1,6 +1,7 @@ -import { DivIcon, DomUtil, FeatureGroup, Marker, Point, Rectangle, Util } from 'leaflet'; +import { DivIcon, FeatureGroup, Marker, Point, Rectangle, Util } from 'leaflet'; import { fixLatOffset, getTranslation } from '../helpers'; import Draw from './L.PM.Draw'; +import Utils from '../L.PM.Utils'; Draw.Rectangle = Draw.extend({ initialize(map) { @@ -216,7 +217,7 @@ Draw.Rectangle = Draw.extend({ const B = fixLatOffset(this._hintMarker.getLatLng(), this._map); // Create a (maybe rotated) box using corners A & B (A = Starting Position, B = Current Mouse Position) - const corners = L.PM.Utils._getRotatedRectangle( + const corners = Utils._getRotatedRectangle( A, B, this.options.rectangleAngle || 0, @@ -248,7 +249,7 @@ Draw.Rectangle = Draw.extend({ }, _findCorners() { const latlngs = this._layer.getLatLngs()[0]; - return L.PM.Utils._getRotatedRectangle( + return Utils._getRotatedRectangle( latlngs[0], latlngs[2], this.options.rectangleAngle || 0, @@ -286,7 +287,7 @@ Draw.Rectangle = Draw.extend({ // rectangle can only initialized with bounds (not working with rotation) so we update the latlngs if (this.options.rectangleAngle) { - const corners = L.PM.Utils._getRotatedRectangle( + const corners = Utils._getRotatedRectangle( A, B, this.options.rectangleAngle || 0, diff --git a/src/js/Draw/L.PM.Draw.Text.js b/src/js/Draw/L.PM.Draw.Text.js index 18bffefb..6000012e 100644 --- a/src/js/Draw/L.PM.Draw.Text.js +++ b/src/js/Draw/L.PM.Draw.Text.js @@ -1,4 +1,4 @@ -import { DivIcon, DomUtil, Marker, Point, Util } from 'leaflet'; +import { DivIcon, Marker, Point, Util } from 'leaflet'; import { getTranslation } from '../helpers'; import Draw from './L.PM.Draw'; diff --git a/src/js/Draw/L.PM.Draw.js b/src/js/Draw/L.PM.Draw.js index f28140c1..fb638a5b 100644 --- a/src/js/Draw/L.PM.Draw.js +++ b/src/js/Draw/L.PM.Draw.js @@ -2,6 +2,7 @@ import { Circle, CircleMarker, Class, Icon, ImageOverlay, Marker, Polyline, Util import merge from 'lodash/merge'; import EventMixin from '../Mixins/Events'; import SnapMixin from '../Mixins/Snapping'; +import Utils from '../L.PM.Utils'; const Draw = Class.extend({ includes: [SnapMixin, EventMixin], @@ -75,7 +76,7 @@ const Draw = Class.extend({ // initiate drawing class for our shapes this.shapes.forEach((shape) => { - this[shape] = new L.PM.Draw[shape](this._map); + this[shape] = new Draw[shape](this._map); }); // TODO: Remove this with the next major release @@ -162,11 +163,11 @@ const Draw = Class.extend({ if (this._enabled) { layers.forEach((layer) => { - L.PM.Utils.disablePopup(layer); + Utils.disablePopup(layer); }); } else { layers.forEach((layer) => { - L.PM.Utils.enablePopup(layer); + Utils.enablePopup(layer); }); } }, @@ -176,11 +177,11 @@ const Draw = Class.extend({ if (this[name]) { throw new TypeError('Draw Type already exists'); } - if (!L.PM.Draw[instance]) { + if (!Draw[instance]) { throw new TypeError(`There is no class L.PM.Draw.${instance}`); } - this[name] = new L.PM.Draw[instance](this._map); + this[name] = new Draw[instance](this._map); this[name].toolbarButtonName = name; this[name]._shape = name; this.shapes.push(name); diff --git a/src/js/Edit/L.PM.Edit.Circle.js b/src/js/Edit/L.PM.Edit.Circle.js index 3b9cdc5f..7724b24a 100644 --- a/src/js/Edit/L.PM.Edit.Circle.js +++ b/src/js/Edit/L.PM.Edit.Circle.js @@ -1,5 +1,5 @@ -import { DomUtil } from 'leaflet'; import Edit from './L.PM.Edit'; +import Utils from '../L.PM.Utils'; Edit.Circle = Edit.CircleMarker.extend({ _shape: 'Circle', @@ -15,7 +15,7 @@ Edit.Circle = Edit.CircleMarker.extend({ }, enable(options) { // TODO: this can be removed after the default options of CircleMarker.enable are removed - L.PM.Edit.CircleMarker.prototype.enable.call(this, options || {}); + Edit.CircleMarker.prototype.enable.call(this, options || {}); }, _extendingEnable() {}, _extendingDisable() { @@ -36,10 +36,10 @@ Edit.Circle = Edit.CircleMarker.extend({ const crsSimple = this._map && this._map.pm._isCRSSimple(); if (this._hiddenPolyCircle) { this._hiddenPolyCircle.setLatLngs( - L.PM.Utils.circleToPolygon(this._layer, 200, !crsSimple).getLatLngs() + Utils.circleToPolygon(this._layer, 200, !crsSimple).getLatLngs() ); } else { - this._hiddenPolyCircle = L.PM.Utils.circleToPolygon( + this._hiddenPolyCircle = Utils.circleToPolygon( this._layer, 200, !crsSimple diff --git a/src/js/Edit/L.PM.Edit.CircleMarker.js b/src/js/Edit/L.PM.Edit.CircleMarker.js index 578e9498..8746cc66 100644 --- a/src/js/Edit/L.PM.Edit.CircleMarker.js +++ b/src/js/Edit/L.PM.Edit.CircleMarker.js @@ -1,6 +1,7 @@ -import { Circle, DivIcon, DomUtil, FeatureGroup, Marker, Point, Polyline, Util } from 'leaflet'; +import { Circle, DivIcon, FeatureGroup, Marker, Point, Polyline, Util } from 'leaflet'; import { destinationOnLine } from '../helpers'; import Edit from './L.PM.Edit'; +import Utils from '../L.PM.Utils'; Edit.CircleMarker = Edit.extend({ _shape: 'CircleMarker', @@ -370,7 +371,7 @@ Edit.CircleMarker = Edit.extend({ _updateHiddenPolyCircle() { const map = this._layer._map || this._map; if (map) { - const radius = L.PM.Utils.pxRadiusToMeterRadius( + const radius = Utils.pxRadiusToMeterRadius( this._layer.getRadius(), map, this._layer.getLatLng() @@ -381,10 +382,10 @@ Edit.CircleMarker = Edit.extend({ const crsSimple = map && map.pm._isCRSSimple(); if (this._hiddenPolyCircle) { this._hiddenPolyCircle.setLatLngs( - L.PM.Utils.circleToPolygon(_layer, 200, !crsSimple).getLatLngs() + Utils.circleToPolygon(_layer, 200, !crsSimple).getLatLngs() ); } else { - this._hiddenPolyCircle = L.PM.Utils.circleToPolygon( + this._hiddenPolyCircle = Utils.circleToPolygon( _layer, 200, !crsSimple @@ -449,14 +450,14 @@ Edit.CircleMarker = Edit.extend({ return this._map.project(A).distanceTo(this._map.project(B)); }, _getMinDistanceInMeter(latlng) { - return L.PM.Utils.pxRadiusToMeterRadius( + return Utils.pxRadiusToMeterRadius( this.options[this._minRadiusOption], this._map, latlng ); }, _getMaxDistanceInMeter(latlng) { - return L.PM.Utils.pxRadiusToMeterRadius( + return Utils.pxRadiusToMeterRadius( this.options[this._maxRadiusOption], this._map, latlng diff --git a/src/js/Edit/L.PM.Edit.LayerGroup.js b/src/js/Edit/L.PM.Edit.LayerGroup.js index 7aec77ae..a4666c0f 100644 --- a/src/js/Edit/L.PM.Edit.LayerGroup.js +++ b/src/js/Edit/L.PM.Edit.LayerGroup.js @@ -1,5 +1,6 @@ import { Class, LayerGroup, Util } from 'leaflet'; import Edit from './L.PM.Edit'; +import Geoman from '../L.PM'; // LayerGroup doesn't inherit from L.PM.Edit because it's just calling L.PM.Edit.Polygon // (which inherits from L.PM.Edit) for each layer, @@ -199,8 +200,8 @@ Edit.LayerGroup = Class.extend({ // filter out everything that ignore leaflet-geoman layers = layers.filter( (layer) => - (!L.PM.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) - (L.PM.optIn && layer.options.pmIgnore === false) // if optIn is true and pmIgnore is false); + (!Geoman.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) + (Geoman.optIn && layer.options.pmIgnore === false) // if optIn is true and pmIgnore is false); ); } return layers; diff --git a/src/js/Edit/L.PM.Edit.Line.js b/src/js/Edit/L.PM.Edit.Line.js index 59c1f909..efd3026e 100644 --- a/src/js/Edit/L.PM.Edit.Line.js +++ b/src/js/Edit/L.PM.Edit.Line.js @@ -4,8 +4,9 @@ import get from 'lodash/get'; import { copyLatLngs, hasValues, removeEmptyCoordRings } from '../helpers'; import Edit from './L.PM.Edit'; -import { DivIcon, DomUtil, FeatureGroup, Marker, Polygon, Polyline, Util } from 'leaflet'; +import { DivIcon, FeatureGroup, Marker, Polygon, Polyline, Util } from 'leaflet'; import MarkerLimits from '../Mixins/MarkerLimits'; +import Utils from '../L.PM.Utils'; // Shit's getting complicated in here with Multipolygon Support. So here's a quick note about it: // Multipolygons with holes means lots of nested, multidimensional arrays. @@ -217,7 +218,7 @@ Edit.Line = Edit.extend({ return false; } - const latlng = L.PM.Utils.calcMiddleLatLng( + const latlng = Utils.calcMiddleLatLng( this._map, leftM.getLatLng(), rightM.getLatLng() @@ -301,7 +302,7 @@ Edit.Line = Edit.extend({ delete newM.rightM; // the index path to the marker inside the multidimensional marker array - const { indexPath, index, parentPath } = L.PM.Utils.findDeepMarkerIndex( + const { indexPath, index, parentPath } = Utils.findDeepMarkerIndex( this._markers, leftM ); @@ -335,7 +336,7 @@ Edit.Line = Edit.extend({ this._fireVertexAdded( newM, - L.PM.Utils.findDeepMarkerIndex(this._markers, newM).indexPath, + Utils.findDeepMarkerIndex(this._markers, newM).indexPath, latlng ); @@ -458,7 +459,7 @@ Edit.Line = Edit.extend({ let coords = this._layer.getLatLngs(); // the index path to the marker inside the multidimensional marker array - const { indexPath, index, parentPath } = L.PM.Utils.findDeepMarkerIndex( + const { indexPath, index, parentPath } = Utils.findDeepMarkerIndex( this._markers, marker ); @@ -598,7 +599,7 @@ Edit.Line = Edit.extend({ const latlng = marker.getLatLng(); // get indexPath of Marker - const { indexPath, index, parentPath } = L.PM.Utils.findDeepMarkerIndex( + const { indexPath, index, parentPath } = Utils.findDeepMarkerIndex( this._markers, marker ); @@ -614,7 +615,7 @@ Edit.Line = Edit.extend({ }, _getNeighborMarkers(marker) { - const { indexPath, index, parentPath } = L.PM.Utils.findDeepMarkerIndex( + const { indexPath, index, parentPath } = Utils.findDeepMarkerIndex( this._markers, marker ); @@ -677,7 +678,7 @@ Edit.Line = Edit.extend({ return; } - const { indexPath } = L.PM.Utils.findDeepMarkerIndex(this._markers, marker); + const { indexPath } = Utils.findDeepMarkerIndex(this._markers, marker); this._fireMarkerDragStart(e, indexPath); @@ -708,7 +709,7 @@ Edit.Line = Edit.extend({ return; } - const { indexPath, index, parentPath } = L.PM.Utils.findDeepMarkerIndex( + const { indexPath, index, parentPath } = Utils.findDeepMarkerIndex( this._markers, marker ); @@ -751,7 +752,7 @@ Edit.Line = Edit.extend({ const nextMarkerLatLng = markerArr[nextMarkerIndex].getLatLng(); if (marker._middleMarkerNext) { - const middleMarkerNextLatLng = L.PM.Utils.calcMiddleLatLng( + const middleMarkerNextLatLng = Utils.calcMiddleLatLng( this._map, markerLatLng, nextMarkerLatLng @@ -760,7 +761,7 @@ Edit.Line = Edit.extend({ } if (marker._middleMarkerPrev) { - const middleMarkerPrevLatLng = L.PM.Utils.calcMiddleLatLng( + const middleMarkerPrevLatLng = Utils.calcMiddleLatLng( this._map, markerLatLng, prevMarkerLatLng @@ -783,7 +784,7 @@ Edit.Line = Edit.extend({ return; } - const { indexPath } = L.PM.Utils.findDeepMarkerIndex(this._markers, marker); + const { indexPath } = Utils.findDDeepMarkerIndex(this._markers, marker); // if self intersection is not allowed but this edit caused a self intersection, // reset and cancel; do not fire events @@ -837,7 +838,7 @@ Edit.Line = Edit.extend({ return; } - const { indexPath } = L.PM.Utils.findDeepMarkerIndex(this._markers, vertex); + const { indexPath } = Utils.findDeepMarkerIndex(this._markers, vertex); this._fireVertexClick(e, indexPath); }, diff --git a/src/js/Edit/L.PM.Edit.Rectangle.js b/src/js/Edit/L.PM.Edit.Rectangle.js index e1e7a83a..355c7ed0 100644 --- a/src/js/Edit/L.PM.Edit.Rectangle.js +++ b/src/js/Edit/L.PM.Edit.Rectangle.js @@ -1,8 +1,9 @@ // Corner detection based on Leaflet Draw's Edit.Rectangle.js Class: // https://github.com/Leaflet/Leaflet.draw/blob/master/src/edit/handler/Edit.Rectangle.js -import { DivIcon, FeatureGroup, Marker, Util } from 'leaflet'; +import { DivIcon, FeatureGroup, Marker } from 'leaflet'; import { calcAngle } from '../helpers'; import Edit from './L.PM.Edit'; +import Utils from '../L.PM.Utils'; Edit.Rectangle = Edit.Polygon.extend({ _shape: 'Rectangle', @@ -102,7 +103,7 @@ Edit.Rectangle = Edit.Polygon.extend({ // (Without this, it's occasionally possible for a marker to get stuck as 'snapped,' which prevents Rectangle resizing) draggedMarker._snapped = false; - const { indexPath } = L.PM.Utils.findDeepMarkerIndex( + const { indexPath } = Utils.findDeepMarkerIndex( this._markers, draggedMarker ); @@ -125,7 +126,7 @@ Edit.Rectangle = Edit.Polygon.extend({ this._adjustRectangleForMarkerMove(draggedMarker); - const { indexPath } = L.PM.Utils.findDeepMarkerIndex( + const { indexPath } = Utils.findDeepMarkerIndex( this._markers, draggedMarker ); @@ -145,7 +146,7 @@ Edit.Rectangle = Edit.Polygon.extend({ delete m._oppositeCornerLatLng; }); - const { indexPath } = L.PM.Utils.findDeepMarkerIndex( + const { indexPath } = Utils.findDeepMarkerIndex( this._markers, draggedMarker ); @@ -164,7 +165,7 @@ Edit.Rectangle = Edit.Polygon.extend({ Object.assign(movedMarker._origLatLng, movedMarker._latlng); // update rectangle boundaries, based on moved marker's new LatLng and cached opposite corner's LatLng - const corners = L.PM.Utils._getRotatedRectangle( + const corners = Utils._getRotatedRectangle( movedMarker.getLatLng(), movedMarker._oppositeCornerLatLng, this.getAngle(), @@ -243,7 +244,7 @@ Edit.Rectangle = Edit.Polygon.extend({ } const latlngs = this._layer.getLatLngs()[0]; - return L.PM.Utils._getRotatedRectangle( + return Utils._getRotatedRectangle( latlngs[0], latlngs[2], this.getAngle(), diff --git a/src/js/Edit/L.PM.Edit.Text.js b/src/js/Edit/L.PM.Edit.Text.js index ee545d6e..29a62a44 100644 --- a/src/js/Edit/L.PM.Edit.Text.js +++ b/src/js/Edit/L.PM.Edit.Text.js @@ -1,5 +1,6 @@ -import { DomEvent, DomUtil, Util } from 'leaflet'; +import { DomEvent, Util } from 'leaflet'; import Edit from './L.PM.Edit'; +import Draw from '../Draw/L.PM.Draw'; Edit.Text = Edit.extend({ _shape: 'Text', @@ -238,12 +239,12 @@ Edit.Text = Edit.extend({ }, _initTextMarker() { - this.textArea = L.PM.Draw.Text.prototype._createTextArea.call(this); + this.textArea = Draw.Text.prototype._createTextArea.call(this); if (this.options.className) { const cssClasses = this.options.className.split(' '); this.textArea.classList.add(...cssClasses); } - const textAreaIcon = L.PM.Draw.Text.prototype._createTextIcon.call( + const textAreaIcon = Draw.Text.prototype._createTextIcon.call( this, this.textArea ); diff --git a/src/js/L.PM.Map.js b/src/js/L.PM.Map.js index 7de3518b..d73ba64e 100644 --- a/src/js/L.PM.Map.js +++ b/src/js/L.PM.Map.js @@ -8,6 +8,10 @@ import GlobalEditMode from './Mixins/Modes/Mode.Edit'; import GlobalRemovalMode from './Mixins/Modes/Mode.Removal'; import GlobalRotateMode from './Mixins/Modes/Mode.Rotate'; import { getRenderer } from './helpers'; +import Draw from './Draw/L.PM.Draw'; +import Toolbar from './Toolbar/L.PM.Toolbar'; +import Geoman from './L.PM'; +import Utils from './L.PM.Utils'; const Map = Class.extend({ includes: [ @@ -19,8 +23,8 @@ const Map = Class.extend({ ], initialize(map) { this.map = map; - this.Draw = new L.PM.Draw(map); - this.Toolbar = new L.PM.Toolbar(map); + this.Draw = new Draw(map); + this.Toolbar = new Toolbar(map); this.Keyboard = createKeyboardMixins(); this.globalOptions = { @@ -76,12 +80,12 @@ const Map = Class.extend({ } } - const oldLang = L.PM.activeLang; + const oldLang = Geoman.activeLang; if (override) { translations[lang] = merge(translations[fallback], override); } - L.PM.activeLang = lang; + Geoman.activeLang = lang; this.map.pm.Toolbar.reinit(); this._fireLangChange(oldLang, lang, fallback, translations[lang]); }, @@ -174,7 +178,7 @@ const Map = Class.extend({ } // enable options for Editing - const layers = L.PM.Utils.findLayers(this.map); + const layers = Utils.findLayers(this.map); layers.forEach((layer) => { layer.pm.setOptions(options); }); @@ -188,7 +192,7 @@ const Map = Class.extend({ this.applyGlobalOptions(); }, applyGlobalOptions() { - const layers = L.PM.Utils.findLayers(this.map); + const layers = Utils.findLayers(this.map); layers.forEach((layer) => { if (layer.pm.enabled()) { layer.pm.applyOptions(); @@ -211,7 +215,7 @@ const Map = Class.extend({ return this.Draw.Cut.disable(); }, getGeomanLayers(asGroup = false) { - const layers = L.PM.Utils.findLayers(this.map); + const layers = Utils.findLayers(this.map); if (!asGroup) { return layers; } @@ -223,7 +227,7 @@ const Map = Class.extend({ return group; }, getGeomanDrawLayers(asGroup = false) { - const layers = L.PM.Utils.findLayers(this.map).filter( + const layers = Utils.findLayers(this.map).filter( (l) => l._drawnByGeoman === true ); if (!asGroup) { diff --git a/src/js/L.PM.Utils.js b/src/js/L.PM.Utils.js index f4816c98..225c41ce 100644 --- a/src/js/L.PM.Utils.js +++ b/src/js/L.PM.Utils.js @@ -1,6 +1,7 @@ import { Circle, CircleMarker, ImageOverlay, LatLng, Marker, Point, Polygon, Polyline } from 'leaflet'; import { createGeodesicPolygon, getTranslation } from './helpers'; import { _toLatLng, _toPoint } from './helpers/ModeHelper'; +import Geoman from './L.PM'; const Utils = { calcMiddleLatLng(map, latlng1, latlng2) { @@ -34,8 +35,8 @@ const Utils = { // filter out everything that ignore leaflet-geoman layers = layers.filter( (layer) => - (!L.PM.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) - (L.PM.optIn && layer.options.pmIgnore === false) // if optIn is true and pmIgnore is false); + (!Geoman.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) + (Geoman.optIn && layer.options.pmIgnore === false) // if optIn is true and pmIgnore is false); ); return layers; diff --git a/src/js/L.PM.js b/src/js/L.PM.js index f64d9361..ae88ce78 100644 --- a/src/js/L.PM.js +++ b/src/js/L.PM.js @@ -8,10 +8,12 @@ * Get Pro: https://geoman.io */ +import { Canvas, Circle, CircleMarker, DomEvent, ImageOverlay, LayerGroup, LeafletMap, Marker, Polygon, Polyline, Rectangle, version, Class } from 'leaflet'; + import packageInfo from '../../package.json'; import './polyfills'; -import Map from './L.PM.Map'; +import GeomanMap from './L.PM.Map'; import Toolbar from './Toolbar/L.PM.Toolbar'; import Draw from './Draw/L.PM.Draw'; @@ -40,12 +42,11 @@ import '../css/layers.css'; import Matrix from './helpers/Matrix'; -import { Canvas, Circle, CircleMarker, DomEvent, ImageOverlay, LayerGroup, Map as LeafletMap, Marker, Polygon, Polyline, Rectangle, version } from 'leaflet'; import Utils from './L.PM.Utils'; -L.PM = L.PM || { +const Geoman = { version: packageInfo.version, - Map, + Map: GeomanMap, Toolbar, Draw, Edit, @@ -63,12 +64,12 @@ L.PM = L.PM || { function initMap() { this.pm = undefined; - if (L.PM.optIn) { + if (Geoman.optIn) { if (this.options.pmIgnore === false) { - this.pm = new L.PM.Map(this); + this.pm = new GeomanMap(this); } } else if (!this.options.pmIgnore) { - this.pm = new L.PM.Map(this); + this.pm = new GeomanMap(this); } if (this.pm) { @@ -80,12 +81,12 @@ L.PM = L.PM || { function initLayerGroup() { this.pm = undefined; - if (L.PM.optIn) { + if (Geoman.optIn) { if (this.options.pmIgnore === false) { - this.pm = new L.PM.Edit.LayerGroup(this); + this.pm = new Edit.LayerGroup(this); } } else if (!this.options.pmIgnore) { - this.pm = new L.PM.Edit.LayerGroup(this); + this.pm = new Edit.LayerGroup(this); } } @@ -94,27 +95,27 @@ L.PM = L.PM || { function initMarker() { this.pm = undefined; - if (L.PM.optIn) { + if (Geoman.optIn) { if (this.options.pmIgnore === false) { if (this.options.textMarker) { - this.pm = new L.PM.Edit.Text(this); + this.pm = new Edit.Text(this); if (!this.options._textMarkerOverPM) { this.pm._initTextMarker(); } delete this.options._textMarkerOverPM; } else { - this.pm = new L.PM.Edit.Marker(this); + this.pm = new Edit.Marker(this); } } } else if (!this.options.pmIgnore) { if (this.options.textMarker) { - this.pm = new L.PM.Edit.Text(this); + this.pm = new Edit.Text(this); if (!this.options._textMarkerOverPM) { this.pm._initTextMarker(); } delete this.options._textMarkerOverPM; } else { - this.pm = new L.PM.Edit.Marker(this); + this.pm = new Edit.Marker(this); } } } @@ -123,12 +124,12 @@ L.PM = L.PM || { function initCircleMarker() { this.pm = undefined; - if (L.PM.optIn) { + if (Geoman.optIn) { if (this.options.pmIgnore === false) { - this.pm = new L.PM.Edit.CircleMarker(this); + this.pm = new Edit.CircleMarker(this); } } else if (!this.options.pmIgnore) { - this.pm = new L.PM.Edit.CircleMarker(this); + this.pm = new Edit.CircleMarker(this); } } CircleMarker.addInitHook(initCircleMarker); @@ -136,12 +137,12 @@ L.PM = L.PM || { function initPolyline() { this.pm = undefined; - if (L.PM.optIn) { + if (Geoman.optIn) { if (this.options.pmIgnore === false) { - this.pm = new L.PM.Edit.Line(this); + this.pm = new Edit.Line(this); } } else if (!this.options.pmIgnore) { - this.pm = new L.PM.Edit.Line(this); + this.pm = new Edit.Line(this); } } @@ -150,12 +151,12 @@ L.PM = L.PM || { function initPolygon() { this.pm = undefined; - if (L.PM.optIn) { + if (Geoman.optIn) { if (this.options.pmIgnore === false) { - this.pm = new L.PM.Edit.Polygon(this); + this.pm = new Edit.Polygon(this); } } else if (!this.options.pmIgnore) { - this.pm = new L.PM.Edit.Polygon(this); + this.pm = new Edit.Polygon(this); } } @@ -164,12 +165,12 @@ L.PM = L.PM || { function initRectangle() { this.pm = undefined; - if (L.PM.optIn) { + if (Geoman.optIn) { if (this.options.pmIgnore === false) { - this.pm = new L.PM.Edit.Rectangle(this); + this.pm = new Edit.Rectangle(this); } } else if (!this.options.pmIgnore) { - this.pm = new L.PM.Edit.Rectangle(this); + this.pm = new Edit.Rectangle(this); } } @@ -178,12 +179,12 @@ L.PM = L.PM || { function initCircle() { this.pm = undefined; - if (L.PM.optIn) { + if (Geoman.optIn) { if (this.options.pmIgnore === false) { - this.pm = new L.PM.Edit.Circle(this); + this.pm = new Edit.Circle(this); } } else if (!this.options.pmIgnore) { - this.pm = new L.PM.Edit.Circle(this); + this.pm = new Edit.Circle(this); } } @@ -192,12 +193,12 @@ L.PM = L.PM || { function initImageOverlay() { this.pm = undefined; - if (L.PM.optIn) { + if (Geoman.optIn) { if (this.options.pmIgnore === false) { - this.pm = new L.PM.Edit.ImageOverlay(this); + this.pm = new Edit.ImageOverlay(this); } } else if (!this.options.pmIgnore) { - this.pm = new L.PM.Edit.ImageOverlay(this); + this.pm = new Edit.ImageOverlay(this); } } @@ -211,34 +212,34 @@ L.PM = L.PM || { } if (layer.pm) { // PM is already added to the layer - } else if (L.PM.optIn && layer.options.pmIgnore !== false) { + } else if (Geoman.optIn && layer.options.pmIgnore !== false) { // Opt-In is true and pmIgnore is not false } else if (layer.options.pmIgnore) { // pmIgnore is true } else if (layer instanceof LeafletMap) { - layer.pm = new L.PM.Map(layer); + layer.pm = new Geoman.Map(layer); } else if (layer instanceof Marker) { if (layer.options.textMarker) { - layer.pm = new L.PM.Edit.Text(layer); + layer.pm = new Edit.Text(layer); layer.pm._initTextMarker(); layer.pm._createTextMarker(false); } else { - layer.pm = new L.PM.Edit.Marker(layer); + layer.pm = new Edit.Marker(layer); } } else if (layer instanceof Circle) { - layer.pm = new L.PM.Edit.Circle(layer); + layer.pm = new Edit.Circle(layer); } else if (layer instanceof CircleMarker) { - layer.pm = new L.PM.Edit.CircleMarker(layer); + layer.pm = new Edit.CircleMarker(layer); } else if (layer instanceof Rectangle) { - layer.pm = new L.PM.Edit.Rectangle(layer); + layer.pm = new Edit.Rectangle(layer); } else if (layer instanceof Polygon) { - layer.pm = new L.PM.Edit.Polygon(layer); + layer.pm = new Edit.Polygon(layer); } else if (layer instanceof Polyline) { - layer.pm = new L.PM.Edit.Line(layer); + layer.pm = new Edit.Line(layer); } else if (layer instanceof LayerGroup) { - layer.pm = new L.PM.Edit.LayerGroup(layer); + layer.pm = new Edit.LayerGroup(layer); } else if (layer instanceof ImageOverlay) { - layer.pm = new L.PM.Edit.ImageOverlay(layer); + layer.pm = new Edit.ImageOverlay(layer); } }, }; @@ -273,4 +274,5 @@ if (version === '1.7.1') { } // initialize leaflet-geoman -L.PM.initialize(); +// L.PM.initialize(); +export default Geoman; \ No newline at end of file diff --git a/src/js/Mixins/Dragging.js b/src/js/Mixins/Dragging.js index 73301630..3207a079 100644 --- a/src/js/Mixins/Dragging.js +++ b/src/js/Mixins/Dragging.js @@ -1,4 +1,4 @@ -import { Canvas, Circle, CircleMarker, DomEvent, DomUtil, ImageOverlay, LayerGroup, Marker, Util } from 'leaflet'; +import { Canvas, Circle, CircleMarker, DomEvent, ImageOverlay, LayerGroup, Marker } from 'leaflet'; import { getRenderer } from '../helpers'; const DragMixin = { diff --git a/src/js/Mixins/Events.js b/src/js/Mixins/Events.js index 6e0422ee..77819102 100644 --- a/src/js/Mixins/Events.js +++ b/src/js/Mixins/Events.js @@ -1,4 +1,5 @@ import merge from 'lodash/merge'; +import Utils from '../L.PM.Utils'; const EventMixin = { // Draw Events @@ -699,7 +700,7 @@ const EventMixin = { // private (very private) fire function __fire(fireLayer, type, payload, source, customPayload = {}) { payload = merge(payload, customPayload, { source }); - L.PM.Utils._fireEvent(fireLayer, type, payload); + Utils._fireEvent(fireLayer, type, payload); }, }; diff --git a/src/js/Mixins/Modes/Mode.Drag.js b/src/js/Mixins/Modes/Mode.Drag.js index 54dc889f..15523151 100644 --- a/src/js/Mixins/Modes/Mode.Drag.js +++ b/src/js/Mixins/Modes/Mode.Drag.js @@ -1,9 +1,11 @@ import { LayerGroup, Util } from "leaflet"; +import Geoman from "../../L.PM"; +import Utils from "../../L.PM.Utils"; const GlobalDragMode = { _globalDragModeEnabled: false, enableGlobalDragMode() { - const layers = L.PM.Utils.findLayers(this.map); + const layers = Utils.findLayers(this.map); this._globalDragModeEnabled = true; this._addedLayersDrag = {}; @@ -32,7 +34,7 @@ const GlobalDragMode = { this._fireGlobalDragModeToggled(true); }, disableGlobalDragMode() { - const layers = L.PM.Utils.findLayers(this.map); + const layers = Utils.findLayers(this.map); this._globalDragModeEnabled = false; @@ -79,8 +81,8 @@ const GlobalDragMode = { return ( layer.pm && !(layer instanceof LayerGroup) && - ((!L.PM.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) - (L.PM.optIn && layer.options.pmIgnore === false)) && // if optIn is true and pmIgnore is false + ((!Geoman.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) + (Geoman.optIn && layer.options.pmIgnore === false)) && // if optIn is true and pmIgnore is false !layer._pmTempLayer && layer.pm.options.draggable ); diff --git a/src/js/Mixins/Modes/Mode.Edit.js b/src/js/Mixins/Modes/Mode.Edit.js index 4c8863b8..fc4b8ddc 100644 --- a/src/js/Mixins/Modes/Mode.Edit.js +++ b/src/js/Mixins/Modes/Mode.Edit.js @@ -1,4 +1,6 @@ import { LayerGroup, Util } from "leaflet"; +import Geoman from "../../L.PM"; +import Utils from "../../L.PM.Utils"; // this mixin adds a global edit mode to the map const GlobalEditMode = { @@ -14,7 +16,7 @@ const GlobalEditMode = { this.Toolbar.toggleButton('editMode', this.globalEditModeEnabled()); // find all layers handled by leaflet-geoman - const layers = L.PM.Utils.findLayers(this.map); + const layers = Utils.findLayers(this.map); // enable all layers layers.forEach((layer) => { @@ -45,7 +47,7 @@ const GlobalEditMode = { this._globalEditModeEnabled = false; // find all layers handles by leaflet-geoman - const layers = L.PM.Utils.findLayers(this.map); + const layers = Utils.findLayers(this.map); // disable all layers layers.forEach((layer) => { @@ -101,8 +103,8 @@ const GlobalEditMode = { return ( layer.pm && !(layer instanceof LayerGroup) && - ((!L.PM.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) - (L.PM.optIn && layer.options.pmIgnore === false)) && // if optIn is true and pmIgnore is false + ((!Geoman.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) + (Geoman.optIn && layer.options.pmIgnore === false)) && // if optIn is true and pmIgnore is false !layer._pmTempLayer && layer.pm.options.allowEditing ); diff --git a/src/js/Mixins/Modes/Mode.Removal.js b/src/js/Mixins/Modes/Mode.Removal.js index 33c43054..ff78d909 100644 --- a/src/js/Mixins/Modes/Mode.Removal.js +++ b/src/js/Mixins/Modes/Mode.Removal.js @@ -1,4 +1,5 @@ import { LayerGroup, Util } from "leaflet"; +import Geoman from "../../L.PM"; const GlobalRemovalMode = { _globalRemovalModeEnabled: false, @@ -85,8 +86,8 @@ const GlobalRemovalMode = { return ( layer.pm && !(layer instanceof LayerGroup) && - ((!L.PM.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) - (L.PM.optIn && layer.options.pmIgnore === false)) && // if optIn is true and pmIgnore is false + ((!Geoman.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) + (Geoman.optIn && layer.options.pmIgnore === false)) && // if optIn is true and pmIgnore is false !layer._pmTempLayer && layer.pm.options.allowRemoval ); diff --git a/src/js/Mixins/Modes/Mode.Rotate.js b/src/js/Mixins/Modes/Mode.Rotate.js index 50f33422..761e9a4b 100644 --- a/src/js/Mixins/Modes/Mode.Rotate.js +++ b/src/js/Mixins/Modes/Mode.Rotate.js @@ -1,10 +1,12 @@ import { LayerGroup, Polyline, Util } from "leaflet"; +import Geoman from "../../L.PM"; +import Utils from "../../L.PM.Utils"; const GlobalRotateMode = { _globalRotateModeEnabled: false, enableGlobalRotateMode() { this._globalRotateModeEnabled = true; - const layers = L.PM.Utils.findLayers(this.map).filter( + const layers = Utils.findLayers(this.map).filter( (l) => l instanceof Polyline ); layers.forEach((layer) => { @@ -32,7 +34,7 @@ const GlobalRotateMode = { }, disableGlobalRotateMode() { this._globalRotateModeEnabled = false; - const layers = L.PM.Utils.findLayers(this.map).filter( + const layers = Utils.findLayers(this.map).filter( (l) => l instanceof Polyline ); layers.forEach((layer) => { @@ -62,8 +64,8 @@ const GlobalRotateMode = { layer.pm && layer instanceof Polyline && !(layer instanceof LayerGroup) && - ((!L.PM.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) - (L.PM.optIn && layer.options.pmIgnore === false)) && // if optIn is true and pmIgnore is false + ((!Geoman.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) + (Geoman.optIn && layer.options.pmIgnore === false)) && // if optIn is true and pmIgnore is false !layer._pmTempLayer && layer.pm.options.allowRotation ); diff --git a/src/js/Mixins/Rotating.js b/src/js/Mixins/Rotating.js index 1c427124..2b7f37df 100644 --- a/src/js/Mixins/Rotating.js +++ b/src/js/Mixins/Rotating.js @@ -1,7 +1,8 @@ -import { Polygon, Util } from 'leaflet'; +import { Polygon, Rectangle } from 'leaflet'; import get from 'lodash/get'; import { calcAngle, copyLatLngs } from '../helpers'; import { _convertLatLngs, _toPoint } from '../helpers/ModeHelper'; +import Matrix from '../helpers/Matrix'; /** * We create a temporary polygon with the same latlngs as the layer that we want to rotate. @@ -45,7 +46,7 @@ const RotateMixin = { angleDiffRadiant, this._initialRotateLatLng, this._rotationOriginLatLng, - L.PM.Matrix.init(), + Matrix.init(), this._map ) ); @@ -75,7 +76,7 @@ const RotateMixin = { angleDiffRadiant, this._rotationLayer.pm._rotateOrgLatLng, this._rotationOriginLatLng, - L.PM.Matrix.init(), + Matrix.init(), this._map ) ); @@ -156,7 +157,7 @@ const RotateMixin = { this.disableRotate(); } - if (this._layer instanceof L.Rectangle && this._angle === undefined) { + if (this._layer instanceof Rectangle && this._angle === undefined) { this.setInitAngle( calcAngle( this._layer._map, @@ -236,7 +237,7 @@ const RotateMixin = { rads, this._layer.getLatLngs(), this._getRotationCenter(), - L.PM.Matrix.init(), + Matrix.init(), this._layer._map ) ); @@ -253,7 +254,7 @@ const RotateMixin = { rads, this._rotatePoly.getLatLngs(), this._getRotationCenter(), - L.PM.Matrix.init(), + Matrix.init(), this._rotatePoly._map ) ); diff --git a/src/js/Mixins/Snapping.js b/src/js/Mixins/Snapping.js index 7876730c..8dd2eeb9 100644 --- a/src/js/Mixins/Snapping.js +++ b/src/js/Mixins/Snapping.js @@ -1,5 +1,7 @@ import { Circle, CircleMarker, ImageOverlay, LineUtil, Marker, Polygon, Polyline, Rectangle, Util } from 'leaflet'; import { hasValues, prioritiseSort } from '../helpers'; +import Geoman from '../L.PM'; +import Utils from '../L.PM.Utils'; const SnapMixin = { _initSnappableMarkers() { @@ -201,8 +203,8 @@ const SnapMixin = { // if snapIgnore === false the layer will be always snappable if ( layer.options.snapIgnore === undefined && - ((!L.PM.optIn && layer.options.pmIgnore === true) || // if optIn is not set and pmIgnore is true, the layer will be ignored - (L.PM.optIn && layer.options.pmIgnore !== false)) // if optIn is true and pmIgnore is not false, the layer will be ignored + ((!Geoman.optIn && layer.options.pmIgnore === true) || // if optIn is not set and pmIgnore is true, the layer will be ignored + (Geoman.optIn && layer.options.pmIgnore !== false)) // if optIn is true and pmIgnore is not false, the layer will be ignored ) { return; } @@ -507,7 +509,7 @@ const SnapMixin = { // snap to middle (M) of segment if option is enabled if (this.options.snapMiddle) { - const M = L.PM.Utils.calcMiddleLatLng(map, A, B); + const M = Utils.calcMiddleLatLng(map, A, B); const distanceMC = this._getDistance(map, M, C); if (distanceMC < distanceAC && distanceMC < distanceBC) { diff --git a/src/js/Toolbar/L.Controls.js b/src/js/Toolbar/L.Controls.js index 53f19194..7ea9e37c 100644 --- a/src/js/Toolbar/L.Controls.js +++ b/src/js/Toolbar/L.Controls.js @@ -1,4 +1,4 @@ -import { Control, DomEvent, DomUtil, Util } from 'leaflet'; +import { Control, DomEvent, DomUtil } from 'leaflet'; import { getTranslation } from '../helpers'; import EventMixin from '../Mixins/Events'; @@ -10,9 +10,11 @@ const PMButton = Control.extend({ }, // TODO: clean up variable names like _button should be _options and that domNodeVariable stuff initialize(options) { - // replaced setOptions with this because classNames returned undefined 🤔 this._button = {}; - Object.assign(this._button, this.options, options); + for (const i in this.options) { + this._button[i] = this.options[i]; + } + Object.assign(this._button, options); }, onAdd(map) { this._map = map; diff --git a/src/js/helpers/Matrix.js b/src/js/helpers/Matrix.js index b32c9033..863e968f 100644 --- a/src/js/helpers/Matrix.js +++ b/src/js/helpers/Matrix.js @@ -5,6 +5,7 @@ */ import { Point } from "leaflet"; +import Geoman from "../L.PM"; /** * @class L.PM.Matrix @@ -23,7 +24,7 @@ const Matrix = function Matrix(a, b, c, d, e, f) { this._matrix = [a, b, c, d, e, f]; }; -Matrix.init = () => new L.PM.Matrix(1, 0, 0, 1, 0, 0); +Matrix.init = () => new Geoman.Matrix(1, 0, 0, 1, 0, 0); Matrix.prototype = { /** @@ -68,7 +69,7 @@ Matrix.prototype = { */ clone() { const matrix = this._matrix; - return new L.PM.Matrix( + return new Geoman.Matrix( matrix[0], matrix[1], matrix[2], @@ -187,7 +188,7 @@ Matrix.prototype = { ]; let val; - if (a && a instanceof L.PM.Matrix) { + if (a && a instanceof Geoman.Matrix) { src = a._matrix; other = [ [src[0], src[2], src[4]], diff --git a/src/js/helpers/ModeHelper.js b/src/js/helpers/ModeHelper.js index ec8a66c2..833678cc 100644 --- a/src/js/helpers/ModeHelper.js +++ b/src/js/helpers/ModeHelper.js @@ -1,4 +1,4 @@ -import { LatLng, Layer, Util } from "leaflet"; +import { LatLng, Layer } from "leaflet"; export function _convertLatLng(latlng, matrix, map, zoom) { return map.unproject(matrix.transform(map.project(latlng, zoom)), zoom); diff --git a/src/js/helpers/index.js b/src/js/helpers/index.js index 22aa45cf..aa803098 100644 --- a/src/js/helpers/index.js +++ b/src/js/helpers/index.js @@ -2,8 +2,10 @@ import { Circle, CircleMarker, CRS, LatLng, Marker, Polygon, Polyline, Rectangle import get from 'lodash/get'; import translations from '../../assets/translations'; +import Geoman from '../L.PM'; + export function getTranslation(path) { - const lang = L.PM.activeLang; + const lang = Geoman.activeLang; // if translation is not found, fallback to english return get(translations[lang], path) || get(translations.en, path) || path; } From 6a2c1eaeffca3c4f8bf63aa3da106c631b13a99c Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Fri, 31 Oct 2025 21:56:01 +0100 Subject: [PATCH 05/41] fix typo --- src/js/Edit/L.PM.Edit.Line.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/Edit/L.PM.Edit.Line.js b/src/js/Edit/L.PM.Edit.Line.js index efd3026e..7607161b 100644 --- a/src/js/Edit/L.PM.Edit.Line.js +++ b/src/js/Edit/L.PM.Edit.Line.js @@ -784,7 +784,7 @@ Edit.Line = Edit.extend({ return; } - const { indexPath } = Utils.findDDeepMarkerIndex(this._markers, marker); + const { indexPath } = Utils.findDeepMarkerIndex(this._markers, marker); // if self intersection is not allowed but this edit caused a self intersection, // reset and cancel; do not fire events From ad01d9bee39de183b89e472f77e27b21a6051341 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Fri, 31 Oct 2025 21:56:38 +0100 Subject: [PATCH 06/41] Add helpers to Geoman object --- src/js/L.PM.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/js/L.PM.js b/src/js/L.PM.js index ae88ce78..83e3e8fa 100644 --- a/src/js/L.PM.js +++ b/src/js/L.PM.js @@ -41,6 +41,7 @@ import '../css/controls.css'; import '../css/layers.css'; import Matrix from './helpers/Matrix'; +import * as helpers from './helpers'; import Utils from './L.PM.Utils'; @@ -52,6 +53,7 @@ const Geoman = { Edit, Utils, Matrix, + helpers, activeLang: 'en', optIn: false, initialize(options) { From 912199a6558aa9bfb886b82cb814549a6e704775 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Fri, 31 Oct 2025 21:59:10 +0100 Subject: [PATCH 07/41] update cypress tests --- cypress/e2e/circle.cy.js | 30 +++++------ cypress/e2e/circlemarker.cy.js | 18 +++---- cypress/e2e/developing.cy.js | 2 +- cypress/e2e/events.cy.js | 14 +++--- cypress/e2e/globalmodes.cy.js | 38 +++++++------- cypress/e2e/helpers.cy.js | 9 +++- cypress/e2e/imageoverlay.cy.js | 8 +-- cypress/e2e/layergroup.cy.js | 38 +++++++------- cypress/e2e/line.cy.js | 8 +-- cypress/e2e/marker.cy.js | 20 ++++---- cypress/e2e/polygon.cy.js | 91 +++++++++++++++------------------- cypress/e2e/rectangle.cy.js | 46 ++++++++--------- cypress/e2e/rotation.cy.js | 20 ++++---- cypress/e2e/text.cy.js | 44 ++++++++-------- cypress/e2e/toolbar.cy.js | 2 +- cypress/e2e/tooltips.cy.js | 12 ++--- cypress/support/commands.js | 28 +++++------ cypress/support/e2e.js | 8 +-- index.html | 31 +++++++----- 19 files changed, 235 insertions(+), 232 deletions(-) diff --git a/cypress/e2e/circle.cy.js b/cypress/e2e/circle.cy.js index fd340d08..9507599a 100644 --- a/cypress/e2e/circle.cy.js +++ b/cypress/e2e/circle.cy.js @@ -134,7 +134,7 @@ describe('Draw Circle', () => { .should('have.class', 'active'); cy.window().then(({ map, L }) => { - L.marker(map.getCenter()).addTo(map); + new L.Marker(map.getCenter()).addTo(map); map.pm.setGlobalOptions({ minRadiusCircle: 500, maxRadiusCircle: 1500, @@ -159,7 +159,7 @@ describe('Draw Circle', () => { .should('have.class', 'active'); cy.window().then(({ map, L }) => { - L.marker(map.getCenter()).addTo(map); + new L.Marker(map.getCenter()).addTo(map); map.pm.setGlobalOptions({ minRadiusCircle: 1500, maxRadiusCircle: 3000, @@ -210,7 +210,7 @@ describe('Draw Circle', () => { let mapSimple; cy.window().then(({ map, L }) => { map.remove(); - mapSimple = L.map('map', { + mapSimple = new L.LeafletMap('map', { crs: L.CRS.Simple, minZoom: -2, doubleClickZoom: false, // Leaflet 1.8 DoubleTap fix @@ -241,7 +241,7 @@ describe('Draw Circle', () => { let mapSimple; cy.window().then(({ map, L }) => { map.remove(); - mapSimple = L.map('map', { + mapSimple = new L.LeafletMap('map', { crs: L.CRS.Simple, minZoom: -2, doubleClickZoom: false, // Leaflet 1.8 DoubleTap fix @@ -478,7 +478,7 @@ describe('Draw Circle', () => { cy.get(mapSelector).click(300, 200); }); - it('checks if editing with snappable:false works', () => { + it.only('checks if editing with snappable:false works', () => { cy.toolbarButton('circle') .click() .closest('.button-container') @@ -502,9 +502,9 @@ describe('Draw Circle', () => { // change radius cy.get(mapSelector) - .trigger('mousedown', 300, 200, { which: 1 }) - .trigger('mousemove', 300, 250, { which: 1 }) - .trigger('mouseup', 300, 250, { which: 1 }); + .trigger('pointerdown', 300, 200, {eventConstructor: 'PointerEvent'}) + .trigger('pointermove', 300, 250, {eventConstructor: 'PointerEvent'}) + .trigger('pointerup', 300, 250, {eventConstructor: 'PointerEvent'}); cy.window().then(({ map }) => { const layer = map.pm.getGeomanLayers()[0]; @@ -515,9 +515,9 @@ describe('Draw Circle', () => { // change center cy.get(mapSelector) - .trigger('mousedown', 200, 200, { which: 1 }) - .trigger('mousemove', 200, 250, { which: 1 }) - .trigger('mouseup', 200, 250, { which: 1 }); + .trigger('pointerdown', 200, 200, {eventConstructor: 'PointerEvent'}) + .trigger('pointermove', 200, 250, {eventConstructor: 'PointerEvent'}) + .trigger('pointerup', 200, 250, {eventConstructor: 'PointerEvent'}); cy.window().then(({ map }) => { const layer = map.pm.getGeomanLayers()[0]; @@ -538,9 +538,9 @@ describe('Draw Circle', () => { // move marker cy.get(mapSelector) - .trigger('mousedown', 400, 200, { which: 1 }) - .trigger('mousemove', 390, 230, { which: 1 }) - .trigger('mouseup', 390, 230, { which: 1 }); + .trigger('pointerdown', 400, 200, {eventConstructor: 'PointerEvent'}) + .trigger('pointermove', 390, 230, {eventConstructor: 'PointerEvent'}) + .trigger('pointerup', 390, 230, {eventConstructor: 'PointerEvent'}); cy.window().then(({ map }) => { const layer = map.pm.getGeomanLayers()[1]; @@ -549,4 +549,4 @@ describe('Draw Circle', () => { expect(layer.getRadius()).to.eq(1240.3294565841613); }); }); -}); +}); \ No newline at end of file diff --git a/cypress/e2e/circlemarker.cy.js b/cypress/e2e/circlemarker.cy.js index 782ea28a..ceb3317d 100644 --- a/cypress/e2e/circlemarker.cy.js +++ b/cypress/e2e/circlemarker.cy.js @@ -44,7 +44,7 @@ describe('Draw Circle Marker', () => { createMarkers(); }); - it('handles 6k circle markers in under 1 sec', () => { + it.only('handles 6k circle markers in under 1 sec', () => { cy.toolbarButton('circle-marker').click(); cy.get(mapSelector).click(150, 250); @@ -59,7 +59,7 @@ describe('Draw Circle Marker', () => { map.eachLayer((layer) => { if (layer instanceof L.CircleMarker) { assert.isFalse( - L.DomUtil.hasClass(layer._path, 'leaflet-pm-draggable'), + layer._path.classList.contains('leaflet-pm-draggable'), 'not draggable' ); } @@ -72,7 +72,7 @@ describe('Draw Circle Marker', () => { map.eachLayer((layer) => { if (layer instanceof L.CircleMarker) { assert.isTrue( - L.DomUtil.hasClass(layer._path, 'leaflet-pm-draggable'), + layer._path.classList.contains('leaflet-pm-draggable'), 'draggable' ); } @@ -85,7 +85,7 @@ describe('Draw Circle Marker', () => { map.eachLayer((layer) => { if (layer instanceof L.CircleMarker) { assert.isFalse( - L.DomUtil.hasClass(layer._path, 'leaflet-pm-draggable'), + layer._path.classList.contains('leaflet-pm-draggable'), 'not draggable' ); } @@ -177,7 +177,7 @@ describe('Draw Circle Marker', () => { it('snapping to CircleMarker with pmIgnore:true', () => { cy.window().then(({ map, L }) => { - L.circleMarker(map.getCenter(), { pmIgnore: true }).addTo(map); + new L.CircleMarker(map.getCenter(), { pmIgnore: true }).addTo(map); }); cy.toolbarButton('rectangle') @@ -257,7 +257,7 @@ describe('Draw Circle Marker', () => { .should('have.class', 'active'); cy.window().then(({ map, L }) => { - L.marker(map.getCenter()).addTo(map); + new L.Marker(map.getCenter()).addTo(map); map.pm.setGlobalOptions({ minRadiusCircleMarker: 50, maxRadiusCircleMarker: 150, @@ -283,7 +283,7 @@ describe('Draw Circle Marker', () => { .should('have.class', 'active'); cy.window().then(({ map, L }) => { - L.marker(map.getCenter()).addTo(map); + new L.Marker(map.getCenter()).addTo(map); map.pm.setGlobalOptions({ minRadiusCircleMarker: 150, maxRadiusCircleMarker: 300, @@ -364,7 +364,7 @@ describe('Draw Circle Marker', () => { let mapSimple; cy.window().then(({ map, L }) => { map.remove(); - mapSimple = L.map('map', { + mapSimple = new L.LeafletMap('map', { crs: L.CRS.Simple, minZoom: -2, }).setView([0, 0], 0); @@ -386,7 +386,7 @@ describe('Draw Circle Marker', () => { let mapSimple; cy.window().then(({ map, L }) => { map.remove(); - mapSimple = L.map('map', { + mapSimple = new L.LeafletMap('map', { crs: L.CRS.Simple, minZoom: -2, }).setView([0, 0], 0); diff --git a/cypress/e2e/developing.cy.js b/cypress/e2e/developing.cy.js index 775e0758..ecafe3d5 100644 --- a/cypress/e2e/developing.cy.js +++ b/cypress/e2e/developing.cy.js @@ -23,7 +23,7 @@ describe('Opens Testing Environment', () => { it('gets all drawn geoman Layers', () => { cy.window().then(({ map, L }) => { - L.marker(map.getCenter()).addTo(map); + new L.Marker(map.getCenter()).addTo(map); }); cy.toolbarButton('polygon').click(); diff --git a/cypress/e2e/events.cy.js b/cypress/e2e/events.cy.js index 70eb85a0..aaa7a3b0 100644 --- a/cypress/e2e/events.cy.js +++ b/cypress/e2e/events.cy.js @@ -329,7 +329,7 @@ describe('Events', () => { .then(() => { cy.get(mapSelector) .click(200, 350) - .trigger('mousemove', { clientX: 200, clientY: 305 }); + .trigger('pointermove', { clientX: 200, clientY: 305 }); }) .then(() => { cy.wait(100); @@ -339,7 +339,7 @@ describe('Events', () => { cy.window() .then(() => { - cy.get(mapSelector).trigger('mousemove', { + cy.get(mapSelector).trigger('pointermove', { clientX: 300, clientY: 355, }); @@ -352,7 +352,7 @@ describe('Events', () => { cy.window() .then(() => { - cy.get(mapSelector).trigger('mousemove', { + cy.get(mapSelector).trigger('pointermove', { clientX: 300, clientY: 385, }); @@ -570,7 +570,7 @@ describe('Events', () => { }); }); - it('snappingOrder', () => { + it.only('snappingOrder', () => { let event = ''; cy.window().then(({ map }) => { map.on('pm:drawstart', (e) => { @@ -590,7 +590,7 @@ describe('Events', () => { cy.get(mapSelector).click(200, 250); cy.toolbarButton('marker').click(); - cy.get(mapSelector).trigger('mousemove', 200, 250, { which: 1 }); + cy.get(mapSelector).trigger('pointermove', 200, 250, { which: 1 }); }); cy.window().then(() => { const shape = event.layerInteractedWith.pm._shape; @@ -603,8 +603,8 @@ describe('Events', () => { map.pm.enableDraw('Marker'); cy.get(mapSelector) - .trigger('mousemove', 200, 150, { which: 1 }) - .trigger('mousemove', 200, 250, { which: 1 }); + .trigger('pointermove', 200, 150, { which: 1 }) + .trigger('pointermove', 200, 250, { which: 1 }); }); cy.window().then(() => { const shape = event.layerInteractedWith.pm._shape; diff --git a/cypress/e2e/globalmodes.cy.js b/cypress/e2e/globalmodes.cy.js index 6aac2506..587b0fa2 100644 --- a/cypress/e2e/globalmodes.cy.js +++ b/cypress/e2e/globalmodes.cy.js @@ -49,7 +49,7 @@ describe('Modes', () => { }, }; // eslint-disable-next-line prefer-destructuring - layer = L.geoJSON(geojson).addTo(map).getLayers()[0]; + layer = new L.GeoJSON(geojson).addTo(map).getLayers()[0]; map.fitBounds(layer.getBounds()); map.pm.setGlobalOptions({ @@ -65,11 +65,11 @@ describe('Modes', () => { cy.toolbarButton('edit').click(); // make the marker visible - cy.get(mapSelector).trigger('mousemove', 500, 120, { which: 1 }); + cy.get(mapSelector).trigger('pointermove', 500, 120, { eventConstructor: 'PointerEvent' }); cy.get(mapSelector) - .trigger('mousedown', 495, 125, { which: 1 }) - .trigger('mousemove', 500, 307, { which: 1 }); + .trigger('pointerdown', 495, 125, { eventConstructor: 'PointerEvent' }) + .trigger('pointermove', 500, 307, { eventConstructor: 'PointerEvent' }); // let the animation to show the new marker finish cy.wait(100); @@ -79,10 +79,10 @@ describe('Modes', () => { }); // end dragging - cy.get(mapSelector).trigger('mouseup', 500, 307, { which: 1 }); + cy.get(mapSelector).trigger('pointerup', 500, 307, { eventConstructor: 'PointerEvent' }); // make other marker visible - cy.get(mapSelector).trigger('mousemove', 310, 330, { which: 1 }); + cy.get(mapSelector).trigger('pointermove', 310, 330, { eventConstructor: 'PointerEvent' }); cy.get('.leaflet-marker-icon').should((p) => { expect(p[0]).to.not.equal(markerHtml); @@ -150,12 +150,12 @@ describe('Modes', () => { const testLayer = new L.FeatureGroup(); map.addLayer(testLayer); - Cypress.$(map).on('pm:create', ({ originalEvent: event }) => { - const poly = event.layer; + map.on('pm:create', ({ layer }) => { + const poly = layer; const coords = poly.getLatLngs(); - const newPoly = L.polygon(coords, { pmIgnore: true }).addTo(testLayer); + const newPoly = new L.Polygon(coords, { pmIgnore: true }).addTo(testLayer); poly.remove(); return newPoly; @@ -251,7 +251,7 @@ describe('Modes', () => { cy.hasVertexMarkers(4); cy.window().then(({ map, L }) => { - L.geoJSON(poly).addTo(map); + new L.GeoJSON(poly).addTo(map); }); cy.hasVertexMarkers(8); @@ -287,8 +287,8 @@ describe('Modes', () => { cy.hasLayers(2); cy.window().then(({ map, L }) => { - L.marker([51.505, -0.09]).addTo(map); - L.marker([51.505, -0.08]).addTo(map); + new L.Marker([51.505, -0.09]).addTo(map); + new L.Marker([51.505, -0.08]).addTo(map); }); cy.window().then(({ map, L }) => { @@ -361,8 +361,8 @@ describe('Modes', () => { const json2 = JSON.parse( '{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.035277,40.703719],[-74.035277,40.712633],[-74.017596,40.712633],[-74.017596,40.703719],[-74.035277,40.703719]]]}}' ); - const p2 = L.geoJson(json).addTo(map); - L.geoJson(json2).addTo(map); + const p2 = new L.GeoJSON(json).addTo(map); + new L.GeoJSON(json2).addTo(map); map.fitBounds(p2.getBounds()); map.setZoom(13); @@ -405,7 +405,7 @@ describe('Modes', () => { }); cy.window().then(({ map, L }) => { - L.geoJSON(poly).addTo(map); + new L.GeoJSON(poly).addTo(map); }); cy.window().then(({ map }) => { @@ -421,7 +421,7 @@ describe('Modes', () => { const jsonString = '{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-0.155182,51.515687],[-0.155182,51.521028],[-0.124283,51.521028],[-0.124283,51.510345],[-0.155182,51.515687]]]}}'; const poly = JSON.parse(jsonString); - L.geoJSON(poly).addTo(map); + new L.GeoJSON(poly).addTo(map); }); cy.window().then(({ map }) => { @@ -439,7 +439,7 @@ describe('Modes', () => { const jsonString = '{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-0.155182,51.515687],[-0.155182,51.521028],[-0.124283,51.521028],[-0.124283,51.510345],[-0.155182,51.515687]]]}}'; const poly = JSON.parse(jsonString); - L.geoJSON(poly).addTo(map); + new L.GeoJSON(poly).addTo(map); }); cy.window().then(({ map }) => { @@ -457,7 +457,7 @@ describe('Modes', () => { const jsonString = '{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-0.155182,51.515687],[-0.155182,51.521028],[-0.124283,51.521028],[-0.124283,51.510345],[-0.155182,51.515687]]]}}'; const poly = JSON.parse(jsonString); - L.geoJSON(poly).addTo(map); + new L.GeoJSON(poly).addTo(map); }); cy.window().then(({ map }) => { @@ -477,7 +477,7 @@ describe('Modes', () => { const jsonString = '{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-0.155182,51.515687],[-0.155182,51.521028],[-0.124283,51.521028],[-0.124283,51.510345],[-0.155182,51.515687]]]}}'; const poly = JSON.parse(jsonString); - L.geoJSON(poly).addTo(map); + new L.GeoJSON(poly).addTo(map); }); cy.window().then(({ map }) => { diff --git a/cypress/e2e/helpers.cy.js b/cypress/e2e/helpers.cy.js index 20f88431..7c041dc8 100644 --- a/cypress/e2e/helpers.cy.js +++ b/cypress/e2e/helpers.cy.js @@ -1,6 +1,11 @@ -import { hasValues } from '../../src/js/helpers'; - describe('Helper hasValues', () => { + let hasValues; + beforeEach(() => { + cy.window().then(({ Geoman }) => { + hasValues = Geoman.helpers.hasValues; + }); + }); + it('should return false for empty arrays', () => { // eslint-disable-next-line no-unused-expressions expect(hasValues([])).to.be.false; diff --git a/cypress/e2e/imageoverlay.cy.js b/cypress/e2e/imageoverlay.cy.js index 0a82c2ca..81ba62b1 100644 --- a/cypress/e2e/imageoverlay.cy.js +++ b/cypress/e2e/imageoverlay.cy.js @@ -7,7 +7,7 @@ describe('Opens Testing Environment', () => { map.setView([18.74469, 72.1258], 10); const icon = 'https://camo.githubusercontent.com/33fa9a94048274f81a806631ca881a55c2aa8f0a/68747470733a2f2f66696c652d6a787a796a67717775742e6e6f772e73682f'; - L.imageOverlay( + new L.ImageOverlay( icon, [ [18.74469, 72.1258], @@ -36,14 +36,14 @@ describe('Opens Testing Environment', () => { }); }); - it('Drags ImageOverlay', () => { + it.only('Drags ImageOverlay', () => { let eventcalled = false; let io; cy.window().then(({ map, L }) => { map.setView([18.74469, 72.1258], 10); const icon = 'https://camo.githubusercontent.com/33fa9a94048274f81a806631ca881a55c2aa8f0a/68747470733a2f2f66696c652d6a787a796a67717775742e6e6f772e73682f'; - io = L.imageOverlay( + io = new L.ImageOverlay( icon, [ [18.74469, 72.1258], @@ -60,7 +60,7 @@ describe('Opens Testing Environment', () => { cy.toolbarButton('drag').click(); cy.window().then(() => { - cy.get(io._image).trigger('mousedown'); + cy.get(io._image).trigger('pointerdown'); }); cy.window().then(() => { diff --git a/cypress/e2e/layergroup.cy.js b/cypress/e2e/layergroup.cy.js index 478ec7c5..92fcdfb2 100644 --- a/cypress/e2e/layergroup.cy.js +++ b/cypress/e2e/layergroup.cy.js @@ -60,8 +60,8 @@ describe('Edit LayerGroup', () => { // Add layer to group cy.window().then(({ L, map }) => { - fg = L.featureGroup().addTo(map); - fg2 = L.featureGroup().addTo(map); + fg = new L.FeatureGroup().addTo(map); + fg2 = new L.FeatureGroup().addTo(map); map.pm.setGlobalOptions({ layerGroup: fg }); @@ -139,7 +139,7 @@ describe('Edit LayerGroup', () => { let firedEvent = ''; cy.window().then(({ map, L }) => { - fg = L.featureGroup(); + fg = new L.FeatureGroup(); fg.on('pm:cut', (e) => { firedEvent = e.type; }); @@ -186,11 +186,11 @@ describe('Edit LayerGroup', () => { it('event is fired only once if group has multiple sub-groups with the same layer', () => { let firedEventCount = 0; cy.window().then(({ map, L }) => { - const group = L.featureGroup().addTo(map); - const layers = L.featureGroup().addTo(group); - const markers = L.featureGroup().addTo(group); - const markersChild = L.featureGroup().addTo(markers); - L.marker(map.getCenter()) + const group = new L.FeatureGroup().addTo(map); + const layers = new L.FeatureGroup().addTo(group); + const markers = new L.FeatureGroup().addTo(group); + const markersChild = new L.FeatureGroup().addTo(markers); + new L.Marker(map.getCenter()) .addTo(layers) .addTo(markers) .addTo(markersChild); @@ -212,11 +212,11 @@ describe('Edit LayerGroup', () => { it('event is fired on every parent group of a layer (once)', () => { let firedEventCount = 0; cy.window().then(({ map, L }) => { - const group = L.featureGroup().addTo(map); - const layers = L.featureGroup().addTo(group); - const markers = L.featureGroup().addTo(group); - const markersChild = L.featureGroup().addTo(markers); - L.marker(map.getCenter()) + const group = new L.FeatureGroup().addTo(map); + const layers = new L.FeatureGroup().addTo(group); + const markers = new L.FeatureGroup().addTo(group); + const markersChild = new L.FeatureGroup().addTo(markers); + new L.Marker(map.getCenter()) .addTo(layers) .addTo(markers) .addTo(markersChild); @@ -266,7 +266,7 @@ describe('Edit LayerGroup', () => { it('new added layers will be changed to edit mode if editmode is enabled', () => { cy.window().then(({ map, L }) => { map.setView([4.009783550466563, 104.00000000000006], 8); - const fg = L.featureGroup().addTo(map); + const fg = new L.FeatureGroup().addTo(map); map.on('pm:create layeradd', (e) => { e.layer.addTo(fg); @@ -287,7 +287,7 @@ describe('Edit LayerGroup', () => { it('new drawn markers not enable other layers in the same layergroup', () => { cy.window().then(({ map, L }) => { map.setView([4.009783550466563, 104.00000000000006], 8); - const fg = L.featureGroup().addTo(map); + const fg = new L.FeatureGroup().addTo(map); map.on('pm:create layeradd', (e) => { e.layer.addTo(fg); @@ -311,20 +311,20 @@ describe('Edit LayerGroup', () => { cy.fixture('LineString') .as('poly') .then((json) => { - layerGroup = L.geoJson(json, { pmIgnore: true }).addTo(map); + layerGroup = new L.GeoJSON(json, { pmIgnore: true }).addTo(map); const bounds = layerGroup.getBounds(); map.fitBounds(bounds); }); }); - cy.window().then(({ map, L }) => { + cy.window().then(({ map, Geoman }) => { expect(map.pm.getGeomanLayers().length).to.eq(0); // enable all child layers of the group layerGroup.setStyle({ pmIgnore: false }); // enable the group self layerGroup.options.pmIgnore = false; - L.PM.reInitLayer(layerGroup); + Geoman.reInitLayer(layerGroup); expect(layerGroup.pm).to.not.eq(undefined); expect(map.pm.getGeomanLayers().length).to.eq(6); @@ -339,7 +339,7 @@ describe('Edit LayerGroup', () => { cy.get(mapSelector).click(350, 200).click(400, 400); cy.window().then(({ map, L }) => { - const fg = L.featureGroup().addTo(map); + const fg = new L.FeatureGroup().addTo(map); const layers = map.pm.getGeomanDrawLayers(); layers.forEach((layer) => { fg.addLayer(layer); diff --git a/cypress/e2e/line.cy.js b/cypress/e2e/line.cy.js index 9c6d34be..f7d4f976 100644 --- a/cypress/e2e/line.cy.js +++ b/cypress/e2e/line.cy.js @@ -367,7 +367,7 @@ describe('Draw & Edit Line', () => { it("snapping doesn't throw an error when Polyline has only one coordinate", () => { cy.window().then(({ map, L }) => { - L.polyline([map.getCenter()]).addTo(map); + new L.Polyline([map.getCenter()]).addTo(map); }); // activate line drawing @@ -440,9 +440,9 @@ describe('Draw & Edit Line', () => { cy.toolbarButton('edit').click(); cy.get(mapSelector) - .trigger('mousedown', 150, 60, { which: 1 }) - .trigger('mousemove', 150, 55, { which: 1 }) - .trigger('mouseup', 150, 55, { which: 1 }); + .trigger('pointerdown', 150, 60, { eventConstructor: 'PointerEvent' }) + .trigger('pointermove', 150, 55, { eventConstructor: 'PointerEvent' }) + .trigger('pointerup', 150, 55, { eventConstructor: 'PointerEvent' }); cy.window().then(({ map }) => { const layer = map.pm.getGeomanDrawLayers()[1]; diff --git a/cypress/e2e/marker.cy.js b/cypress/e2e/marker.cy.js index e1e3f1b1..befb16dc 100644 --- a/cypress/e2e/marker.cy.js +++ b/cypress/e2e/marker.cy.js @@ -23,7 +23,7 @@ describe('Draw Marker', () => { it('removes markers without error', () => { cy.window().then(({ map, L }) => { - const markerLayer = L.geoJson().addTo(map); + const markerLayer = new L.GeoJSON().addTo(map); map.pm.enableDraw('Marker', { snappable: false, @@ -80,7 +80,7 @@ describe('Draw Marker', () => { // Adds a interactive Marker to the map and enable / disable the edit mode to check if a error is thrown because it is not draggable cy.window() .then(({ map, L }) => - L.marker([51.505, -0.09], { interactive: false }).addTo(map) + new L.Marker([51.505, -0.09], { interactive: false }).addTo(map) ) .as('marker'); @@ -132,7 +132,7 @@ describe('Draw Marker', () => { handFinish = true; }, }); - const toucherMarker = handMarker.growFinger('mouse'); + const toucherMarker = handMarker.growFinger('pointer'); toucherMarker .wait(100) .moveTo(150, 240, 100) @@ -173,7 +173,7 @@ describe('Draw Marker', () => { done(); }, }); - const toucherMarker = handMarker.growFinger('mouse'); + const toucherMarker = handMarker.growFinger('pointer'); toucherMarker .wait(100) .moveTo(150, 240, 100) @@ -301,12 +301,12 @@ describe('Draw Marker', () => { .closest('.button-container') .should('have.class', 'active'); - cy.get(mapSelector).trigger('mousemove', 300, 300); + cy.get(mapSelector).trigger('pointermove', 300, 300); cy.window().then(({ map, L }) => { map.pm.setGlobalOptions({ markerStyle: { - icon: L.icon({ + icon: new L.Icon({ iconUrl: 'someIcon.png', }), }, @@ -326,12 +326,12 @@ describe('Draw Marker', () => { expect(map.pm.getGeomanDrawLayers().length).to.eq(1); }); - cy.get(mapSelector).trigger('mousedown', 150, 230, { which: 1 }); - cy.get(mapSelector).trigger('mousemove', 170, 290, { which: 1 }); + cy.get(mapSelector).trigger('pointerdown', 150, 230, { which: 1 }); + cy.get(mapSelector).trigger('pointermove', 170, 290, { which: 1 }); // Do not create a new marker while dragging cy.get(mapSelector).click(170, 290); - cy.get(mapSelector).trigger('mouseup', 170, 290, { which: 1 }); - cy.get(mapSelector).trigger('mousemove', 190, 340, { which: 1 }); + cy.get(mapSelector).trigger('pointerup', 170, 290, { which: 1 }); + cy.get(mapSelector).trigger('pointermove', 190, 340, { which: 1 }); cy.window().then(({ map }) => { expect(map.pm.getGeomanDrawLayers().length).to.eq(1); diff --git a/cypress/e2e/polygon.cy.js b/cypress/e2e/polygon.cy.js index 488d3f32..d5ef585e 100644 --- a/cypress/e2e/polygon.cy.js +++ b/cypress/e2e/polygon.cy.js @@ -23,8 +23,8 @@ describe('Draw & Edit Poly', () => { }); it('works without pmIgnore', () => { - cy.window().then(({ L }) => { - L.PM.setOptIn(false); + cy.window().then(({ Geoman }) => { + Geoman.setOptIn(false); cy.drawShape('MultiPolygon'); }); @@ -34,8 +34,8 @@ describe('Draw & Edit Poly', () => { }); it('respects pmIgnore', () => { - cy.window().then(({ L }) => { - L.PM.setOptIn(false); + cy.window().then(({ Geoman }) => { + Geoman.setOptIn(false); cy.drawShape('MultiPolygon', true); }); @@ -45,8 +45,8 @@ describe('Draw & Edit Poly', () => { }); it('respects optIn', () => { - cy.window().then(({ L }) => { - L.PM.setOptIn(true); + cy.window().then(({ Geoman }) => { + Geoman.setOptIn(true); cy.drawShape('MultiPolygon'); }); @@ -56,8 +56,8 @@ describe('Draw & Edit Poly', () => { }); it('OptIn drawing without error', () => { - cy.window().then(({ L }) => { - L.PM.setOptIn(true); + cy.window().then(({ Geoman }) => { + Geoman.setOptIn(true); }); cy.toolbarButton('polygon').click(); cy.get(mapSelector) @@ -112,8 +112,8 @@ describe('Draw & Edit Poly', () => { }); it('respects pmIgnore with optIn', () => { - cy.window().then(({ L }) => { - L.PM.setOptIn(true); + cy.window().then(({ Geoman }) => { + Geoman.setOptIn(true); cy.drawShape('MultiPolygon', false); }); @@ -123,12 +123,12 @@ describe('Draw & Edit Poly', () => { }); it('respects optIn and reinit layer', () => { - cy.window().then(({ L }) => { - L.PM.setOptIn(true); + cy.window().then(({ Geoman }) => { + Geoman.setOptIn(true); cy.drawShape('MultiPolygon').then((poly) => { cy.hasVertexMarkers(0); // Not allowed because optIn - L.PM.setOptIn(false); - L.PM.reInitLayer(poly); + Geoman.setOptIn(false); + Geoman.reInitLayer(poly); }); }); cy.toolbarButton('edit').click(); @@ -137,20 +137,20 @@ describe('Draw & Edit Poly', () => { }); it('respects optIn and reinit layer with pmIgnore', () => { - cy.window().then(({ L }) => { - L.PM.setOptIn(true); + cy.window().then(({ Geoman }) => { + Geoman.setOptIn(true); cy.drawShape('MultiPolygon', true).then((poly) => { cy.hasVertexMarkers(0); // Not allowed because optIn - L.PM.reInitLayer(poly); // Not allowed because pmIgnore is not false + Geoman.reInitLayer(poly); // Not allowed because pmIgnore is not false cy.hasVertexMarkers(0); - L.PM.setOptIn(false); - L.PM.reInitLayer(poly); // Not allowed because pmIgnore is true + Geoman.setOptIn(false); + Geoman.reInitLayer(poly); // Not allowed because pmIgnore is true cy.hasVertexMarkers(0); poly.options.pmIgnore = false; poly.eachLayer((layer) => { layer.options.pmIgnore = false; }); - L.PM.reInitLayer(poly); // Allowed because pmIgnore is not true + Geoman.reInitLayer(poly); // Allowed because pmIgnore is not true }); }); cy.toolbarButton('edit').click(); @@ -159,11 +159,11 @@ describe('Draw & Edit Poly', () => { }); it('respects optIn and disable optIn', () => { - cy.window().then(({ L }) => { - L.PM.setOptIn(true); + cy.window().then(({ Geoman }) => { + Geoman.setOptIn(true); cy.drawShape('MultiPolygon'); cy.drawShape('MultiPolygon', false).then(() => { - L.PM.setOptIn(false); + Geoman.setOptIn(false); cy.drawShape('MultiPolygon'); }); }); @@ -212,20 +212,15 @@ describe('Draw & Edit Poly', () => { it('removes layer when cut completely', () => { cy.window().then(({ map }) => { - Cypress.$(map).on('pm:create', ({ originalEvent }) => { - const { layer } = originalEvent; + map.on('pm:create', ({ layer }) => { layer.options.cypress = true; }); - Cypress.$(map).on('pm:cut', ({ originalEvent }) => { - const { layer } = originalEvent; - + map.on('pm:cut', ({ layer }) => { expect(Object.keys(layer.getLayers())).to.have.lengthOf(0); }); - Cypress.$(map).on('pm:remove', ({ originalEvent }) => { - const { layer } = originalEvent; - + map.on('pm:remove', ({ layer }) => { /* eslint no-unused-expressions: 0 */ expect(layer._map).to.be.null; expect(layer.options.cypress).to.equal(true); @@ -424,8 +419,7 @@ describe('Draw & Edit Poly', () => { }); cy.get('@poly').then((poly) => { - Cypress.$(poly).on('pm:vertexadded', ({ originalEvent: event }) => { - const { layer, indexPath, latlng } = event; + poly.on('pm:vertexadded', ({ layer, indexPath, latlng }) => { const newLatLng = Cypress._.get(layer._latlngs, indexPath); expect(latlng.lat).to.equal(newLatLng.lat); expect(latlng.lng).to.equal(newLatLng.lng); @@ -446,18 +440,15 @@ describe('Draw & Edit Poly', () => { it('events to be called', () => { cy.window().then(({ map }) => { // test pm:create event - Cypress.$(map).on('pm:create', ({ originalEvent: event }) => { - const poly = event.layer; + map.on('pm:create', ({ layer }) => { + const poly = layer; poly.pm.enable(); const markers = poly.pm._markers[0]; expect(markers).to.have.length(4); }); - Cypress.$(map).on('pm:remove', ({ originalEvent: event }) => { - const layer = event.target; - - /* eslint no-unused-expressions: 0 */ + map.on('pm:remove', ({ layer }) => { expect(layer.map).to.be.undefined; }); }); @@ -549,7 +540,7 @@ describe('Draw & Edit Poly', () => { it('fire pm:cut AFTER the actual cut is visible on the map', () => { cy.window().then(({ map, L }) => { - Cypress.$(map).on('pm:cut', () => { + map.on('pm:cut', () => { const layers = []; map.eachLayer((layer) => { @@ -689,7 +680,7 @@ describe('Draw & Edit Poly', () => { cy.window().then(({ map, L, Hand }) => { cy.fixture('PolygonIntersects') .then((json) => { - const layer = L.geoJSON(json).getLayers()[0].addTo(map); + const layer = new L.GeoJSON(json).getLayers()[0].addTo(map); const bounds = layer.getBounds(); map.fitBounds(bounds); return layer; @@ -718,7 +709,7 @@ describe('Draw & Edit Poly', () => { expect(poly.pm.hasSelfIntersection()).to.equal(true); const toucherSelfIntersectionFalse = - handSelfIntersectionFalse.growFinger('mouse'); + handSelfIntersectionFalse.growFinger('pointer'); toucherSelfIntersectionFalse .wait(100) .moveTo(504, 337, 100) @@ -745,7 +736,7 @@ describe('Draw & Edit Poly', () => { }); const toucherSelfIntersectionTrue = - handSelfIntersectionTrue.growFinger('mouse'); + handSelfIntersectionTrue.growFinger('pointer'); toucherSelfIntersectionTrue .wait(100) .moveTo(294, 114, 100) @@ -777,7 +768,7 @@ describe('Draw & Edit Poly', () => { it('no snapping to polygon with no coords', () => { cy.window().then(({ map, L }) => { - L.polygon([]).addTo(map); + new L.Polygon([]).addTo(map); }); // activate line drawing @@ -1287,7 +1278,7 @@ describe('Draw & Edit Poly', () => { it('snap to start marker instead of to the layer below', () => { cy.window().then(({ map, L }) => { // it was not possible to create this test with creating the polygon by clicking - const polygon = L.polygon([ + const polygon = new L.Polygon([ [ [20.53507732696281, 71.98242187500001], [19.87005983797396, 71.97143554687501], @@ -1324,7 +1315,7 @@ describe('Draw & Edit Poly', () => { }); }); - cy.get(mapSelector).trigger('mousemove', 413, 180); + cy.get(mapSelector).trigger('pointermove', 413, 180); cy.window().then(({ map }) => { const hintMarker = map.pm.Draw.Polygon._hintMarker; @@ -1455,9 +1446,9 @@ describe('Draw & Edit Poly', () => { cy.toolbarButton('edit').click(); cy.get(mapSelector) - .trigger('mousedown', 150, 60, { which: 1 }) - .trigger('mousemove', 150, 55, { which: 1 }) - .trigger('mouseup', 150, 55, { which: 1 }); + .trigger('pointerdown', 150, 60, { eventConstructor: 'PointerEvent' }) + .trigger('pointermove', 150, 55, { which: 1 }) + .trigger('pointerup', 150, 55, { which: 1 }); cy.window().then(({ map }) => { const layer = map.pm.getGeomanDrawLayers()[1]; @@ -1470,7 +1461,7 @@ describe('Draw & Edit Poly', () => { let polygon; cy.window().then(({ map, L }) => { - polygon = L.polygon([ + polygon = new L.Polygon([ [ [20.53507732696281, 71.98242187500001, 111], [19.87005983797396, 71.97143554687501, 222], diff --git a/cypress/e2e/rectangle.cy.js b/cypress/e2e/rectangle.cy.js index 0f32a9ef..983f6d5a 100644 --- a/cypress/e2e/rectangle.cy.js +++ b/cypress/e2e/rectangle.cy.js @@ -308,10 +308,10 @@ describe('Draw Rectangle', () => { }); // test 5: snapIgnore: undefined, pmIgnore: false, optIn: true --> snappable - cy.window().then(({ L }) => { + cy.window().then(({ Geoman }) => { delete layer.options.snapIgnore; layer.options.pmIgnore = false; - L.PM.setOptIn(true); + Geoman.setOptIn(true); }); cy.toolbarButton('rectangle').click(); // click or mousemove is needed to init snapList @@ -323,9 +323,9 @@ describe('Draw Rectangle', () => { }); // test 6: snapIgnore: undefined, pmIgnore: true, optIn: true --> not snappable - cy.window().then(({ L }) => { + cy.window().then(({ Geoman }) => { layer.options.pmIgnore = true; - L.PM.setOptIn(true); + Geoman.setOptIn(true); }); cy.toolbarButton('rectangle').click(); // click or mousemove is needed to init snapList @@ -414,7 +414,7 @@ describe('Draw Rectangle', () => { it('drags a whole LayerGroup', () => { cy.window().then(({ map, L }) => { - const fg = L.featureGroup().addTo(map); + const fg = new L.FeatureGroup().addTo(map); map.pm.setGlobalOptions({ layerGroup: fg, syncLayersOnDrag: true }); }); @@ -582,7 +582,7 @@ describe('Draw Rectangle', () => { cy.window().then(({ L, map }) => { // move the hintMarker outside of the map bounds (max is 85.0511287798) - map.pm.Draw.Rectangle._hintMarker.setLatLng(L.latLng(87, -302)); + map.pm.Draw.Rectangle._hintMarker.setLatLng(new L.LatLng(87, -302)); const drawRect = map.pm.Draw.Rectangle; @@ -613,7 +613,7 @@ describe('Draw Rectangle', () => { cy.window().then(({ L, map }) => { map.remove(); - const tiles = L.tileLayer( + const tiles = new L.TileLayer( 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: @@ -622,7 +622,7 @@ describe('Draw Rectangle', () => { ); // create the map - mapCanvas = L.map('map', { + mapCanvas = new L.Map('map', { preferCanvas: true, }) .setView([51.505, -0.09], 13) @@ -700,7 +700,7 @@ describe('Draw Rectangle', () => { cy.window().then(({ L, map }) => { map.remove(); - const tiles = L.tileLayer( + const tiles = new L.TileLayer( 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: @@ -709,7 +709,7 @@ describe('Draw Rectangle', () => { ); // create the map - mapCanvas = L.map('map', { + mapCanvas = new L.Map('map', { preferCanvas: true, }) .setView([51.505, -0.09], 13) @@ -756,7 +756,7 @@ describe('Draw Rectangle', () => { cy.window().then(({ L, map }) => { map.remove(); - const tiles = L.tileLayer( + const tiles = new L.TileLayer( 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: @@ -765,8 +765,8 @@ describe('Draw Rectangle', () => { ); // create the map - mapCanvas = L.map('map', { - renderer: L.canvas(), + mapCanvas = new L.Map('map', { + renderer: new L.Canvas(), }) .setView([51.505, -0.09], 13) .addLayer(tiles); @@ -814,7 +814,7 @@ describe('Draw Rectangle', () => { cy.window().then(({ L, map }) => { map.remove(); - const tiles = L.tileLayer( + const tiles = new L.TileLayer( 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: @@ -823,8 +823,8 @@ describe('Draw Rectangle', () => { ); // create the map - mapCanvas = L.map('map', { - renderer: L.canvas(), + mapCanvas = new L.Map('map', { + renderer: new L.Canvas(), }) .setView([51.505, -0.09], 13) .addLayer(tiles); @@ -834,7 +834,7 @@ describe('Draw Rectangle', () => { mapCanvas.on('pm:create', (e) => { rect1 = e.layer; - rect2 = L.rectangle(rect1.getBounds(), { renderer: L.svg() }).addTo( + rect2 = new L.Rectangle(rect1.getBounds(), { renderer: new L.SVG() }).addTo( mapCanvas ); }); @@ -931,7 +931,7 @@ describe('Draw Rectangle', () => { .should('have.class', 'active'); cy.get(mapSelector).click(220, 220); - cy.get(mapSelector).trigger('mousemove', 500, 300); + cy.get(mapSelector).trigger('pointermove', 500, 300); cy.window().then(({ map }) => { const corners = map.pm.Draw.Rectangle._findCorners(); @@ -955,11 +955,11 @@ describe('Draw Rectangle', () => { const coords = JSON.parse( '{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-0.122532,51.507986],[-0.117474,51.518864],[-0.06784,51.509926],[-0.072898,51.499046],[-0.122532,51.507986]]]}}' ); - const rectangle = L.rectangle([ + const rectangle = new L.Rectangle([ [0, 0], [0, 0], ]); - rectangle.setLatLngs(L.geoJSON(coords).getLayers()[0].getLatLngs()); + rectangle.setLatLngs(new L.GeoJSON(coords).getLayers()[0].getLatLngs()); rectangle.addTo(map); }); @@ -1069,9 +1069,9 @@ describe('Draw Rectangle', () => { cy.toolbarButton('edit').click(); cy.get(mapSelector) - .trigger('mousedown', 150, 60, { which: 1 }) - .trigger('mousemove', 150, 55, { which: 1 }) - .trigger('mouseup', 150, 55, { which: 1 }); + .trigger('pointerdown', 150, 60, {eventConstructor: 'PointerEvent'}) + .trigger('pointermove', 150, 55, {eventConstructor: 'PointerEvent'}) + .trigger('pointerup', 150, 55, {eventConstructor: 'PointerEvent'}); cy.window().then(({ map }) => { const layer = map.pm.getGeomanDrawLayers()[1]; diff --git a/cypress/e2e/rotation.cy.js b/cypress/e2e/rotation.cy.js index a9341465..58efe1ab 100644 --- a/cypress/e2e/rotation.cy.js +++ b/cypress/e2e/rotation.cy.js @@ -141,7 +141,7 @@ describe('Rotation', () => { expect( layer .getLatLngs()[0][1] - .equals(L.latLng([51.48267237710426, -0.08847595304329439])) + .equals(new L.LatLng([51.48267237710426, -0.08847595304329439])) ).to.equal(true); }); }); @@ -216,7 +216,7 @@ describe('Rotation', () => { [1, 2], [3, 4], ]; - const rect = L.rectangle(coords).addTo(map); + const rect = new L.Rectangle(coords).addTo(map); rect.pm.rotateLayer(50); }).to.not.throw(); }); @@ -229,7 +229,7 @@ describe('Rotation', () => { [4, 4], ]; - const rect = L.rectangle(coords).addTo(map); + const rect = new L.Rectangle(coords).addTo(map); // If no rotation center is set, use the shape's center. const defaultCenter = rect.pm.getRotationCenter(); @@ -237,7 +237,7 @@ describe('Rotation', () => { expect(defaultCenter.lng).to.closeTo(2, 0.1); // Introduce a new origin of rotation - rect.pm.setRotationCenter(L.latLng([4, 4])); + rect.pm.setRotationCenter(new L.LatLng([4, 4])); const newCenter = rect.pm.getRotationCenter(); expect(newCenter.lat).to.closeTo(4, 0.1); expect(newCenter.lng).to.closeTo(4, 0.1); @@ -394,7 +394,7 @@ describe('Rotation', () => { [1, 2], [3, 4], ]; - const rect = L.rectangle(coords).addTo(map); + const rect = new L.Rectangle(coords).addTo(map); rect.pm.enableRotate(); expect(map.pm.getGeomanLayers().length).to.eq(1); @@ -407,7 +407,7 @@ describe('Rotation', () => { [1, 2], [3, 4], ]; - const rect = L.rectangle(coords).addTo(map); + const rect = new L.Rectangle(coords).addTo(map); rect.pm.enableRotate(); rect.pm.enableRotate(); @@ -422,12 +422,12 @@ describe('Rotation', () => { [1, 2], [3, 4], ]; - L.rectangle(coords).addTo(map); + new L.Rectangle(coords).addTo(map); const coords2 = [ [2, 3], [3, 4], ]; - L.rectangle(coords2).addTo(map); + new L.Rectangle(coords2).addTo(map); map.pm.enableGlobalRotateMode(); map.pm.enableGlobalRotateMode(); @@ -442,11 +442,11 @@ describe('Rotation', () => { const coords = JSON.parse( '{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-0.122532,51.507986],[-0.117474,51.518864],[-0.06784,51.509926],[-0.072898,51.499046],[-0.122532,51.507986]]]}}' ); - const rectangle = L.rectangle([ + const rectangle = new L.Rectangle([ [0, 0], [0, 0], ]); - rectangle.setLatLngs(L.geoJSON(coords).getLayers()[0].getLatLngs()); + rectangle.setLatLngs(new L.GeoJSON(coords).getLayers()[0].getLatLngs()); rectangle.addTo(map); }); diff --git a/cypress/e2e/text.cy.js b/cypress/e2e/text.cy.js index 32e76df2..bf908244 100644 --- a/cypress/e2e/text.cy.js +++ b/cypress/e2e/text.cy.js @@ -3,7 +3,7 @@ describe('Text Layer', () => { it('Add Text Layer manual', () => { cy.window().then(({ map, L }) => { - const textLayer = L.marker(map.getCenter(), { + const textLayer = new L.Marker(map.getCenter(), { textMarker: true, text: 'Text Layer', }).addTo(map); @@ -12,7 +12,7 @@ describe('Text Layer', () => { }); cy.window().then(({ map, L }) => { - const textLayer = L.marker(map.getCenter(), { + const textLayer = new L.Marker(map.getCenter(), { textMarker: false, text: 'Text Layer', }).addTo(map); @@ -21,7 +21,7 @@ describe('Text Layer', () => { }); cy.window().then(({ map, L }) => { - const textLayer = L.marker(map.getCenter(), { + const textLayer = new L.Marker(map.getCenter(), { textMarker: true, }).addTo(map); expect(textLayer.pm.getShape()).to.eq('Text'); @@ -31,10 +31,10 @@ describe('Text Layer', () => { }); it('Add Text Layer over OptIn', () => { - cy.window().then(({ map, L }) => { - L.PM.setOptIn(true); + cy.window().then(({ map, L, Geoman }) => { + Geoman.setOptIn(true); - const textLayer = L.marker(map.getCenter(), { + const textLayer = new L.Marker(map.getCenter(), { textMarker: true, text: 'Text Layer', }).addTo(map); @@ -42,7 +42,7 @@ describe('Text Layer', () => { expect(map.pm.getGeomanLayers().length).to.eq(0); textLayer.options.pmIgnore = false; - L.PM.reInitLayer(textLayer); + Geoman.reInitLayer(textLayer); expect(map.pm.getGeomanLayers().length).to.eq(1); }); @@ -177,7 +177,7 @@ describe('Text Layer', () => { expect(textMap).to.eq(null); }); - cy.get(mapSelector).trigger('mousemove', 200, 150, { which: 1 }); + cy.get(mapSelector).trigger('pointermove', 200, 150, { which: 1 }); cy.window().then(({ map }) => { const textMap = map.pm.Draw.Text._hintMarker._map; @@ -400,7 +400,7 @@ describe('Text Layer', () => { let textLayer; let textArea; cy.window().then(({ map, L }) => { - textLayer = L.marker(map.getCenter(), { + textLayer = new L.Marker(map.getCenter(), { textMarker: true, text: 'Text Layer', }).addTo(map); @@ -431,7 +431,7 @@ describe('Text Layer', () => { let textLayer; let textArea; cy.window().then(({ map, L }) => { - textLayer = L.marker(map.getCenter(), { + textLayer = new L.Marker(map.getCenter(), { textMarker: true, text: 'Text Layer', }).addTo(map); @@ -455,7 +455,7 @@ describe('Text Layer', () => { let textLayer; let textArea; cy.window().then(({ map, L }) => { - textLayer = L.marker(map.getCenter(), { + textLayer = new L.Marker(map.getCenter(), { textMarker: true, text: 'Text Layer', }).addTo(map); @@ -478,7 +478,7 @@ describe('Text Layer', () => { }); it('getElement', () => { cy.window().then(({ map, L }) => { - const textLayer = L.marker(map.getCenter(), { + const textLayer = new L.Marker(map.getCenter(), { textMarker: true, text: 'Text Layer', }).addTo(map); @@ -488,7 +488,7 @@ describe('Text Layer', () => { }); it('setText', () => { cy.window().then(({ map, L }) => { - const textLayer = L.marker(map.getCenter(), { + const textLayer = new L.Marker(map.getCenter(), { textMarker: true, text: 'Text Layer', }).addTo(map); @@ -500,7 +500,7 @@ describe('Text Layer', () => { }); it('getText', () => { cy.window().then(({ map, L }) => { - const textLayer = L.marker(map.getCenter(), { + const textLayer = new L.Marker(map.getCenter(), { textMarker: true, text: 'Text Layer', }).addTo(map); @@ -509,7 +509,7 @@ describe('Text Layer', () => { }); it('unselect text on disable', () => { cy.window().then(({ map, L }) => { - const textLayer = L.marker(map.getCenter(), { + const textLayer = new L.Marker(map.getCenter(), { textMarker: true, text: 'Text Layer', }).addTo(map); @@ -530,7 +530,7 @@ describe('Text Layer', () => { it('enable map dragging after blur', () => { cy.window().then(({ map, L }) => { - const textLayer = L.marker(map.getCenter(), { + const textLayer = new L.Marker(map.getCenter(), { textMarker: true, text: 'Text Layer', }).addTo(map); @@ -554,7 +554,7 @@ describe('Text Layer', () => { let textLayer; let event = ''; cy.window().then(({ map, L }) => { - textLayer = L.marker(map.getCenter(), { + textLayer = new L.Marker(map.getCenter(), { textMarker: true, text: '', }).addTo(map); @@ -578,7 +578,7 @@ describe('Text Layer', () => { let textLayer; let event = ''; cy.window().then(({ map, L }) => { - textLayer = L.marker(map.getCenter(), { + textLayer = new L.Marker(map.getCenter(), { textMarker: true, text: '', }).addTo(map); @@ -603,7 +603,7 @@ describe('Text Layer', () => { let textLayer; let event = ''; cy.window().then(({ map, L }) => { - textLayer = L.marker(map.getCenter(), { + textLayer = new L.Marker(map.getCenter(), { textMarker: true, text: '', }).addTo(map); @@ -628,7 +628,7 @@ describe('Text Layer', () => { let textLayer; let event = ''; cy.window().then(({ map, L }) => { - textLayer = L.marker(map.getCenter(), { + textLayer = new L.Marker(map.getCenter(), { textMarker: true, text: '', }).addTo(map); @@ -649,7 +649,7 @@ describe('Text Layer', () => { let textLayer; let event = ''; cy.window().then(({ map, L }) => { - textLayer = L.marker(map.getCenter(), { + textLayer = new L.Marker(map.getCenter(), { textMarker: true, text: '', }).addTo(map); @@ -672,7 +672,7 @@ describe('Text Layer', () => { let event = ''; let count = 0; cy.window().then(({ map, L }) => { - textLayer = L.marker(map.getCenter(), { + textLayer = new L.Marker(map.getCenter(), { textMarker: true, text: '', }).addTo(map); diff --git a/cypress/e2e/toolbar.cy.js b/cypress/e2e/toolbar.cy.js index 9a907034..a4dc7340 100644 --- a/cypress/e2e/toolbar.cy.js +++ b/cypress/e2e/toolbar.cy.js @@ -466,7 +466,7 @@ describe('Testing the Toolbar', () => { map.remove(); // create the map - map = L.map('map', { + map = new L.Map('map', { preferCanvas: false, doubleClickZoom: false, // Leaflet 1.8 DoubleTap fix }).setView([51.505, -0.09], 13); diff --git a/cypress/e2e/tooltips.cy.js b/cypress/e2e/tooltips.cy.js index 2d7e6149..6ae8ba67 100644 --- a/cypress/e2e/tooltips.cy.js +++ b/cypress/e2e/tooltips.cy.js @@ -243,7 +243,7 @@ describe('Shows Tooltips', () => { }); it('Add fallback to english for translations', () => { - cy.window().then(({ map, L }) => { + cy.window().then(({ map, Geoman }) => { // we set the language to 'custom' // to make sure that it has no fallback we overwrite the fallback with 'xx' map.pm.setLang( @@ -256,19 +256,19 @@ describe('Shows Tooltips', () => { 'xx' ); - expect(L.PM.Utils.getTranslation('tooltips.mytext')).to.eq('Some Text'); - expect(L.PM.Utils.getTranslation('tooltips.placeMarker')).to.eq( + expect(Geoman.Utils.getTranslation('tooltips.mytext')).to.eq('Some Text'); + expect(Geoman.Utils.getTranslation('tooltips.placeMarker')).to.eq( 'Click to place marker' ); }); }); it('shows key if no translation is available', () => { - cy.window().then(({ L }) => { - expect(L.PM.Utils.getTranslation('tooltips.placeMarker')).to.eq( + cy.window().then(({ Geoman }) => { + expect(Geoman.Utils.getTranslation('tooltips.placeMarker')).to.eq( 'Click to place marker' ); - expect(L.PM.Utils.getTranslation('tooltips.mytext')).to.eq( + expect(Geoman.Utils.getTranslation('tooltips.mytext')).to.eq( 'tooltips.mytext' ); }); diff --git a/cypress/support/commands.js b/cypress/support/commands.js index b292faee..606f9e3e 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -63,15 +63,15 @@ Cypress.Commands.add('testLayerAdditionPerformance', () => { const locations = []; for (let i = 0; i < 3500; i += 1) { - locations.push(L.circleMarker(getRandomLatLng(map))); + locations.push(new L.CircleMarker(getRandomLatLng(map))); } for (let i = 0; i < 2500; i += 1) { - terminals.push(L.circleMarker(getRandomLatLng(map))); + terminals.push(new L.CircleMarker(getRandomLatLng(map))); } - const t = L.layerGroup(terminals).addTo(map); - const l = L.layerGroup(locations).addTo(map); + const t = new L.LayerGroup(terminals).addTo(map); + const l = new L.LayerGroup(locations).addTo(map); const base = {}; @@ -80,7 +80,7 @@ Cypress.Commands.add('testLayerAdditionPerformance', () => { Terminals: l, }; - L.control.layers(base, overlays).addTo(map); + new L.Control.Layers(base, overlays).addTo(map); }); cy.window().then(() => { @@ -124,7 +124,7 @@ Cypress.Commands.add('drawShape', (shape, ignore) => { cy.fixture(shape) .as('poly') .then((json) => { - const layer = L.geoJson(json, { pmIgnore: ignore }).addTo(map); + const layer = new L.GeoJSON(json, { pmIgnore: ignore }).addTo(map); const bounds = layer.getBounds(); map.fitBounds(bounds); }); @@ -133,7 +133,7 @@ Cypress.Commands.add('drawShape', (shape, ignore) => { cy.fixture(shape) .as('poly') .then((json) => { - const layer = L.geoJson(json, { pmIgnore: ignore }).addTo(map); + const layer = new L.GeoJSON(json, { pmIgnore: ignore }).addTo(map); const bounds = layer.getBounds(); map.fitBounds(bounds); }); @@ -142,7 +142,7 @@ Cypress.Commands.add('drawShape', (shape, ignore) => { cy.fixture(shape) .as('poly') .then((json) => { - const layer = L.geoJson(json, { pmIgnore: ignore }).addTo(map); + const layer = new L.GeoJSON(json, { pmIgnore: ignore }).addTo(map); const bounds = layer.getBounds(); map.fitBounds(bounds); return layer; @@ -153,7 +153,7 @@ Cypress.Commands.add('drawShape', (shape, ignore) => { cy.fixture(shape) .as('poly') .then((json) => { - const layer = L.geoJson(json, { pmIgnore: ignore }).addTo(map); + const layer = new L.GeoJSON(json, { pmIgnore: ignore }).addTo(map); const bounds = layer.getBounds(); map.fitBounds(bounds); }); @@ -163,7 +163,7 @@ Cypress.Commands.add('drawShape', (shape, ignore) => { cy.fixture(shape) .as('poly') .then((json) => { - const layer = L.geoJson(json, { pmIgnore: ignore }).addTo(map); + const layer = new L.GeoJSON(json, { pmIgnore: ignore }).addTo(map); const bounds = layer.getBounds(); map.fitBounds(bounds); }); @@ -173,7 +173,7 @@ Cypress.Commands.add('drawShape', (shape, ignore) => { cy.fixture(shape) .as('poly') .then((json) => { - const layer = L.polygon(json.data.points, { pmIgnore: ignore }).addTo( + const layer = new L.Polygon(json.data.points, { pmIgnore: ignore }).addTo( map ); const bounds = layer.getBounds(); @@ -186,7 +186,7 @@ Cypress.Commands.add('drawShape', (shape, ignore) => { .as('poly') .then((json) => { // - const layer = L.geoJSON(json).addTo(map); + const layer = new L.GeoJSON(json).addTo(map); const bounds = layer.getBounds(); map.fitBounds(bounds); }); @@ -196,7 +196,7 @@ Cypress.Commands.add('drawShape', (shape, ignore) => { cy.fixture(shape) .then((json) => { // - const layer = L.geoJSON(json).addTo(map); + const layer = new L.GeoJSON(json).addTo(map); const bounds = layer.getBounds(); map.fitBounds(bounds); @@ -208,7 +208,7 @@ Cypress.Commands.add('drawShape', (shape, ignore) => { if (shape === 'FeatureCollectionWithCircles') { cy.fixture(shape, ignore) .then((json) => { - const layer = L.geoJson(json, { + const layer = new L.GeoJSON(json, { pmIgnore: ignore, pointToLayer: (feature, latlng) => { if (feature.properties.customGeometry) { diff --git a/cypress/support/e2e.js b/cypress/support/e2e.js index 0e8e3bc5..cdd8e064 100644 --- a/cypress/support/e2e.js +++ b/cypress/support/e2e.js @@ -23,9 +23,11 @@ beforeEach(() => { // create the map cy.visit('/index.html', { onLoad: (contentWindow) => { - const { L } = contentWindow; + const { L, Geoman } = contentWindow; - const tiles = L.tileLayer( + Geoman.initialize(); + + const tiles = new L.TileLayer( 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: @@ -35,7 +37,7 @@ beforeEach(() => { ); // create the map - const map = L.map('map', { + const map = new L.LeafletMap('map', { preferCanvas: false, doubleClickZoom: false, // Leaflet 1.8 DoubleTap fix }) diff --git a/index.html b/index.html index 90b77df0..e180eedb 100644 --- a/index.html +++ b/index.html @@ -5,18 +5,28 @@ Leaflet Geometry Management - - - - + + + + + + + + + + + + + + + + + + + +
+ + + diff --git a/demo/customcontrols.html b/demo/customcontrols.html index d11bafd2..f334a465 100644 --- a/demo/customcontrols.html +++ b/demo/customcontrols.html @@ -11,6 +11,17 @@ + + + + @@ -27,10 +38,6 @@

Custom Controls in the Toolbar

- - - - - + diff --git a/demo/customcontrols.js b/demo/customcontrols.js index cedcfdb4..b864d5c7 100644 --- a/demo/customcontrols.js +++ b/demo/customcontrols.js @@ -1,8 +1,13 @@ /* eslint-disable no-console */ /* eslint-disable no-alert */ -const map = L.map('map').setView([40.0269319, 32.83604819], 13); +import { TileLayer, LeafletMap } from "leaflet"; +import Geoman from 'leaflet-geoman'; -L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { +Geoman.initialize(); + +const map = new LeafletMap('map').setView([40.0269319, 32.83604819], 13); + +new TileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '© OpenStreetMap contributors', @@ -24,7 +29,7 @@ map.pm.Toolbar.createCustomControl({ className: 'leaflet-pm-icon-marker xyz-class', title: 'Count layers', onClick: () => { - alert(`There are ${L.PM.Utils.findLayers(map).length} layers on the map`); + alert(`There are ${Geoman.Utils.findLayers(map).length} layers on the map`); }, toggle: false, }); diff --git a/demo/demo-canvas.js b/demo/demo-canvas.js index b0dff3b2..e1d9d061 100644 --- a/demo/demo-canvas.js +++ b/demo/demo-canvas.js @@ -1,29 +1,34 @@ /* eslint-disable no-console */ -const tiles1 = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { +import { TileLayer, LeafletMap, CircleMarker, Marker, FeatureGroup, Polygon, Polyline, LayerGroup, GeoJSON } from "leaflet"; +import Geoman from 'leaflet-geoman'; + +Geoman.initialize(); + +const tiles1 = new TileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '© OpenStreetMap contributors', }); -const tiles2 = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { +const tiles2 = new TileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '© OpenStreetMap contributors', }); -const tiles3 = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { +const tiles3 = new TileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '© OpenStreetMap contributors', }); -const map2 = L.map('example2', { preferCanvas: true }) +const map2 = new LeafletMap('example2', { preferCanvas: true }) .setView([51.505, -0.09], 13) .addLayer(tiles1); -const map3 = L.map('example3', { preferCanvas: true }) +const map3 = new LeafletMap('example3', { preferCanvas: true }) .setView([51.505, -0.09], 13) .addLayer(tiles2); -const map4 = L.map('example4', { preferCanvas: true }) +const map4 = new LeafletMap('example4', { preferCanvas: true }) .setView([51.505, -0.09], 13) .addLayer(tiles3); // map2.dragging.disable(); @@ -52,11 +57,11 @@ const map4 = L.map('example4', { preferCanvas: true }) // console.log(e.workingLayer); // }); -const m1 = L.circleMarker([51.50313, -0.091223], { radius: 10 }); -const m2 = L.marker([51.50614, -0.0989]); -const m3 = L.marker([51.50915, -0.096112], { pmIgnore: true }); +const m1 = new CircleMarker([51.50313, -0.091223], { radius: 10 }); +const m2 = new Marker([51.50614, -0.0989]); +const m3 = new Marker([51.50915, -0.096112], { pmIgnore: true }); -const mGroup = L.layerGroup([m1, m2, m3]).addTo(map2); +const mGroup = new LayerGroup([m1, m2, m3]).addTo(map2); mGroup.pm.enable(); map2.pm.addControls({ @@ -128,7 +133,7 @@ const geoJsonData = { }; // const geoJsonButton = document.getElementById('test-geojson'); -const geoJsonLayer = L.geoJson(null, { pmIgnore: false }); +const geoJsonLayer = new GeoJSON(null, { pmIgnore: false }); geoJsonLayer.addTo(map2); geoJsonLayer.addData(geoJsonData); // geoJsonLayer.pm.toggleEdit({ @@ -169,7 +174,7 @@ map3.pm.enableDraw('Polygon', { finishOnDoubleClick: true, }); -const scotland = L.polygon([ +const scotland = new Polygon([ [ [60, -13], [60, 0], @@ -189,7 +194,7 @@ const bounds = scotland.getBounds(); map3.fitBounds(bounds); -geoJsonLayer.addEventListener('click', () => { +geoJsonLayer.on('click', () => { geoJsonLayer.pm.toggleEdit(); }); @@ -224,7 +229,7 @@ map2.on('pm:create', (e) => { // Polygon Example -const polygonLayer = L.polygon([ +const polygonLayer = new Polygon([ [51.509, -0.08], [51.503, -0.06], [51.51, -0.047], @@ -287,18 +292,18 @@ polygonLayer.on('pm:markerdragstart', (x) => { // Layer Group Example -const layerGroupItem1 = L.polyline([ +const layerGroupItem1 = new Polyline([ [51.51, -0.09], [51.513, -0.08], [51.514, -0.11], ]); -const layerGroupItem2 = L.polygon([ +const layerGroupItem2 = new Polygon([ [51.52, -0.06], [51.51, -0.07], [51.52, -0.05], ]); -const layerGroupItem3 = L.polygon([ +const layerGroupItem3 = new Polygon([ [51.51549835365031, -0.06450164634969281], [51.51944818307178, -0.08425079345703125], [51.51868369995795, -0.06131630004205801], @@ -321,13 +326,13 @@ const feature = { }, }; -const layerGroup = L.featureGroup([layerGroupItem1]).addTo(map4); +const layerGroup = new FeatureGroup([layerGroupItem1]).addTo(map4); layerGroup.pm.toggleEdit({ draggable: true, snappable: true, snapDistance: 30, }); -const someLayer = L.geoJSON(feature); +const someLayer = new GeoJSON(feature); layerGroup.addLayer(someLayer); @@ -348,7 +353,7 @@ map4.pm.addControls({ }); map4.pm.enableDraw('Polygon', { - finishOn: 'mouseout', + finishOn: 'pointerout', }); map4.pm.disableDraw('Polygon'); diff --git a/demo/demo.js b/demo/demo.js index 04c45565..5f9f99e9 100644 --- a/demo/demo.js +++ b/demo/demo.js @@ -1,25 +1,30 @@ /* eslint-disable no-console */ -const tiles1 = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { +import { TileLayer, LeafletMap, Circle, CircleMarker, Marker, FeatureGroup, Polygon, Polyline, LayerGroup, GeoJSON } from "leaflet"; +import Geoman from 'leaflet-geoman'; + +Geoman.initialize(); + +const tiles1 = new TileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '© OpenStreetMap contributors', }); -const tiles2 = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { +const tiles2 = new TileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '© OpenStreetMap contributors', }); -const tiles3 = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { +const tiles3 = new TileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '© OpenStreetMap contributors', }); -const map2 = L.map('example2').setView([51.505, -0.09], 13).addLayer(tiles1); -const map3 = L.map('example3').setView([51.505, -0.09], 13).addLayer(tiles2); -const map4 = L.map('example4').setView([51.505, -0.09], 13).addLayer(tiles3); +const map2 = new LeafletMap('example2').setView([51.505, -0.09], 13).addLayer(tiles1); +const map3 = new LeafletMap('example3').setView([51.505, -0.09], 13).addLayer(tiles2); +const map4 = new LeafletMap('example4').setView([51.505, -0.09], 13).addLayer(tiles3); // map2.dragging.disable(); // map2.on('pm:create', function(e) { @@ -46,12 +51,12 @@ const map4 = L.map('example4').setView([51.505, -0.09], 13).addLayer(tiles3); // console.log(e.workingLayer); // }); -const m1 = L.circleMarker([51.50313, -0.091223], { radius: 10 }); -const m2 = L.marker([51.50614, -0.0989]); -const m3 = L.marker([51.50915, -0.096112], { pmIgnore: true }); +const m1 = new CircleMarker([51.50313, -0.091223], { radius: 10 }); +const m2 = new Marker([51.50614, -0.0989]); +const m3 = new Marker([51.50915, -0.096112], { pmIgnore: true }); // eslint-disable-next-line no-unused-vars -const mGroup = L.layerGroup([m1, m2, m3]).addTo(map2); +const mGroup = new LayerGroup([m1, m2, m3]).addTo(map2); // mGroup.pm.enable(); map2.pm.addControls({ @@ -184,12 +189,12 @@ const geoJsonData = { ], }; -const theCollection = L.geoJson(geoJsonData, { +const theCollection = new GeoJSON(geoJsonData, { pointToLayer: (feature, latlng) => { if (feature.properties.customGeometry) { - return new L.Circle(latlng, feature.properties.customGeometry.radius); + return new Circle(latlng, feature.properties.customGeometry.radius); } - return new L.Marker(latlng); + return new Marker(latlng); }, // onEachFeature: (feature, layer) => { // layer.addTo(map2); @@ -254,7 +259,7 @@ map3.pm.enableDraw('Polygon', { finishOnDoubleClick: true, }); -const scotland = L.polygon([ +const scotland = new Polygon([ [ [60, -13], [60, 0], @@ -299,7 +304,7 @@ map2.on('pm:create', (e) => { // Polygon Example -const polygonLayer = L.polygon([ +const polygonLayer = new Polygon([ [51.509, -0.08], [51.503, -0.06], [51.51, -0.047], @@ -372,7 +377,7 @@ polygonLayer.on('pm:markerdragstart', (e) => { // Layer Group Example -const layerGroupItem1 = L.polyline( +const layerGroupItem1 = new Polyline( [ [51.51, -0.09], [51.513, -0.08], @@ -380,13 +385,13 @@ const layerGroupItem1 = L.polyline( ], { pmIgnore: true } ); -const layerGroupItem2 = L.polygon([ +const layerGroupItem2 = new Polygon([ [51.52, -0.06], [51.51, -0.07], [51.52, -0.05], ]); -const layerGroupItem3 = L.polygon([ +const layerGroupItem3 = new Polygon([ [51.51549835365031, -0.06450164634969281], [51.51944818307178, -0.08425079345703125], [51.51868369995795, -0.06131630004205801], @@ -409,13 +414,13 @@ const feature = { }, }; -const layerGroup = L.featureGroup([layerGroupItem1]).addTo(map4); +const layerGroup = new FeatureGroup([layerGroupItem1]).addTo(map4); layerGroup.pm.toggleEdit({ draggable: true, snappable: true, snapDistance: 30, }); -const someLayer = L.geoJSON(feature); +const someLayer = new GeoJSON(feature); layerGroup.addLayer(someLayer); @@ -435,7 +440,7 @@ map4.pm.addControls({ }); map4.pm.enableDraw('Polygon', { - finishOn: 'mouseout', + finishOn: 'pointerout', }); map4.pm.disableDraw('Polygon'); @@ -472,8 +477,8 @@ layerGroup.on('pm:markerdragend', (e) => { }); // test with markercluster -// var markers = L.markerClusterGroup(); -// markers.addLayer(L.marker([51.505, -0.07])); -// markers.addLayer(L.marker([51.505, -0.08])); -// markers.addLayer(L.marker([51.505, -0.09])); +// var markers = new MarkerClusterGroup(); +// markers.addLayer(new Marker([51.505, -0.07])); +// markers.addLayer(new Marker([51.505, -0.08])); +// markers.addLayer(new Marker([51.505, -0.09])); // map4.addLayer(markers); diff --git a/demo/events.html b/demo/events.html index 5cf7a0fb..4c23693f 100644 --- a/demo/events.html +++ b/demo/events.html @@ -11,6 +11,17 @@ + + + +
@@ -20,10 +31,6 @@

Overview of the available events (Console)

- - - - - + diff --git a/demo/events.js b/demo/events.js index 8bfc3032..9b24276e 100644 --- a/demo/events.js +++ b/demo/events.js @@ -1,10 +1,15 @@ /* eslint-disable no-console */ -const map = L.map('map').setView([39.74739, -105], 13); +import { TileLayer, LeafletMap } from "leaflet"; +import Geoman from 'leaflet-geoman'; + +Geoman.initialize(); + +const map = new LeafletMap('map').setView([39.74739, -105], 13); map.pm.addControls(); map.pm.setLang('de'); -L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { +new TileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '© OpenStreetMap contributors', diff --git a/demo/index-canvas.html b/demo/index-canvas.html index e89be302..c6de848e 100644 --- a/demo/index-canvas.html +++ b/demo/index-canvas.html @@ -12,6 +12,17 @@ + + + + @@ -39,10 +50,6 @@

Editing A Layer Group

- - - - - + diff --git a/demo/index.html b/demo/index.html index 88ec8108..0fc8278a 100644 --- a/demo/index.html +++ b/demo/index.html @@ -12,6 +12,17 @@ + + + + @@ -39,10 +50,6 @@

Editing A Layer Group

- - - - - + From df36e229e314e7e71451de9675f0bf3723109279 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sat, 1 Nov 2025 10:56:07 +0100 Subject: [PATCH 10/41] Reformat files --- src/js/Draw/L.PM.Draw.CircleMarker.js | 11 ++++++++++- src/js/Draw/L.PM.Draw.Line.js | 5 +---- src/js/Draw/L.PM.Draw.js | 11 ++++++++++- src/js/Edit/L.PM.Edit.CircleMarker.js | 16 ++++++++++------ src/js/Edit/L.PM.Edit.Line.js | 9 ++++++++- src/js/L.PM.Utils.js | 11 ++++++++++- src/js/L.PM.js | 18 ++++++++++++++++-- src/js/Mixins/Dragging.js | 22 ++++++++++++++-------- src/js/Mixins/Keyboard.js | 2 +- src/js/Mixins/MarkerLimits.js | 2 +- src/js/Mixins/Modes/Mode.Drag.js | 6 +++--- src/js/Mixins/Modes/Mode.Edit.js | 6 +++--- src/js/Mixins/Modes/Mode.Removal.js | 4 ++-- src/js/Mixins/Modes/Mode.Rotate.js | 6 +++--- src/js/Mixins/Snapping.js | 15 ++++++++++++--- src/js/Toolbar/L.PM.Toolbar.js | 10 ++-------- src/js/helpers/Matrix.js | 4 ++-- src/js/helpers/ModeHelper.js | 2 +- 18 files changed, 109 insertions(+), 51 deletions(-) diff --git a/src/js/Draw/L.PM.Draw.CircleMarker.js b/src/js/Draw/L.PM.Draw.CircleMarker.js index 961ce62f..5782f26a 100644 --- a/src/js/Draw/L.PM.Draw.CircleMarker.js +++ b/src/js/Draw/L.PM.Draw.CircleMarker.js @@ -1,4 +1,13 @@ -import { CircleMarker, DivIcon, Polyline, Circle, FeatureGroup, Marker, Point, Util } from 'leaflet'; +import { + CircleMarker, + DivIcon, + Polyline, + Circle, + FeatureGroup, + Marker, + Point, + Util, +} from 'leaflet'; import { destinationOnLine, getTranslation } from '../helpers'; import Draw from './L.PM.Draw'; import Utils from '../L.PM.Utils'; diff --git a/src/js/Draw/L.PM.Draw.Line.js b/src/js/Draw/L.PM.Draw.Line.js index 44f0a7c2..7ee81579 100644 --- a/src/js/Draw/L.PM.Draw.Line.js +++ b/src/js/Draw/L.PM.Draw.Line.js @@ -309,10 +309,7 @@ Draw.Line = Draw.extend({ const removedMarker = markers[markers.length - 1]; // the index path to the marker inside the multidimensional marker array - const { indexPath } = Utils.findDeepMarkerIndex( - markers, - removedMarker - ); + const { indexPath } = Utils.findDeepMarkerIndex(markers, removedMarker); // remove last marker from array markers.pop(); diff --git a/src/js/Draw/L.PM.Draw.js b/src/js/Draw/L.PM.Draw.js index fb638a5b..a96388d4 100644 --- a/src/js/Draw/L.PM.Draw.js +++ b/src/js/Draw/L.PM.Draw.js @@ -1,4 +1,13 @@ -import { Circle, CircleMarker, Class, Icon, ImageOverlay, Marker, Polyline, Util } from 'leaflet'; +import { + Circle, + CircleMarker, + Class, + Icon, + ImageOverlay, + Marker, + Polyline, + Util, +} from 'leaflet'; import merge from 'lodash/merge'; import EventMixin from '../Mixins/Events'; import SnapMixin from '../Mixins/Snapping'; diff --git a/src/js/Edit/L.PM.Edit.CircleMarker.js b/src/js/Edit/L.PM.Edit.CircleMarker.js index 8746cc66..bf2919ec 100644 --- a/src/js/Edit/L.PM.Edit.CircleMarker.js +++ b/src/js/Edit/L.PM.Edit.CircleMarker.js @@ -1,4 +1,12 @@ -import { Circle, DivIcon, FeatureGroup, Marker, Point, Polyline, Util } from 'leaflet'; +import { + Circle, + DivIcon, + FeatureGroup, + Marker, + Point, + Polyline, + Util, +} from 'leaflet'; import { destinationOnLine } from '../helpers'; import Edit from './L.PM.Edit'; import Utils from '../L.PM.Utils'; @@ -385,11 +393,7 @@ Edit.CircleMarker = Edit.extend({ Utils.circleToPolygon(_layer, 200, !crsSimple).getLatLngs() ); } else { - this._hiddenPolyCircle = Utils.circleToPolygon( - _layer, - 200, - !crsSimple - ); + this._hiddenPolyCircle = Utils.circleToPolygon(_layer, 200, !crsSimple); } if (!this._hiddenPolyCircle._parentCopy) { diff --git a/src/js/Edit/L.PM.Edit.Line.js b/src/js/Edit/L.PM.Edit.Line.js index 7607161b..d66b19e2 100644 --- a/src/js/Edit/L.PM.Edit.Line.js +++ b/src/js/Edit/L.PM.Edit.Line.js @@ -4,7 +4,14 @@ import get from 'lodash/get'; import { copyLatLngs, hasValues, removeEmptyCoordRings } from '../helpers'; import Edit from './L.PM.Edit'; -import { DivIcon, FeatureGroup, Marker, Polygon, Polyline, Util } from 'leaflet'; +import { + DivIcon, + FeatureGroup, + Marker, + Polygon, + Polyline, + Util, +} from 'leaflet'; import MarkerLimits from '../Mixins/MarkerLimits'; import Utils from '../L.PM.Utils'; diff --git a/src/js/L.PM.Utils.js b/src/js/L.PM.Utils.js index 225c41ce..25d7f721 100644 --- a/src/js/L.PM.Utils.js +++ b/src/js/L.PM.Utils.js @@ -1,4 +1,13 @@ -import { Circle, CircleMarker, ImageOverlay, LatLng, Marker, Point, Polygon, Polyline } from 'leaflet'; +import { + Circle, + CircleMarker, + ImageOverlay, + LatLng, + Marker, + Point, + Polygon, + Polyline, +} from 'leaflet'; import { createGeodesicPolygon, getTranslation } from './helpers'; import { _toLatLng, _toPoint } from './helpers/ModeHelper'; import Geoman from './L.PM'; diff --git a/src/js/L.PM.js b/src/js/L.PM.js index 83e3e8fa..4c9fb269 100644 --- a/src/js/L.PM.js +++ b/src/js/L.PM.js @@ -8,7 +8,21 @@ * Get Pro: https://geoman.io */ -import { Canvas, Circle, CircleMarker, DomEvent, ImageOverlay, LayerGroup, LeafletMap, Marker, Polygon, Polyline, Rectangle, version, Class } from 'leaflet'; +import { + Canvas, + Circle, + CircleMarker, + DomEvent, + ImageOverlay, + LayerGroup, + LeafletMap, + Marker, + Polygon, + Polyline, + Rectangle, + version, + Class, +} from 'leaflet'; import packageInfo from '../../package.json'; import './polyfills'; @@ -277,4 +291,4 @@ if (version === '1.7.1') { // initialize leaflet-geoman // L.PM.initialize(); -export default Geoman; \ No newline at end of file +export default Geoman; diff --git a/src/js/Mixins/Dragging.js b/src/js/Mixins/Dragging.js index 3207a079..99519115 100644 --- a/src/js/Mixins/Dragging.js +++ b/src/js/Mixins/Dragging.js @@ -1,4 +1,12 @@ -import { Canvas, Circle, CircleMarker, DomEvent, ImageOverlay, LayerGroup, Marker } from 'leaflet'; +import { + Canvas, + Circle, + CircleMarker, + DomEvent, + ImageOverlay, + LayerGroup, + Marker, +} from 'leaflet'; import { getRenderer } from '../helpers'; const DragMixin = { @@ -18,10 +26,7 @@ const DragMixin = { this._map = this._layer._map; } - if ( - this._layer instanceof Marker || - this._layer instanceof ImageOverlay - ) { + if (this._layer instanceof Marker || this._layer instanceof ImageOverlay) { // prevents dragging the DOM image instead of the marker DomEvent.on(this._getDOMElem(), 'dragstart', this._stopDOMImageDrag); } @@ -369,8 +374,7 @@ const DragMixin = { }); if ( - (this._layer instanceof Circle && - this._layer.options.resizeableCircle) || + (this._layer instanceof Circle && this._layer.options.resizeableCircle) || (this._layer instanceof CircleMarker && this._layer.options.resizeableCircleMarker) ) { @@ -450,7 +454,9 @@ const DragMixin = { e.target.getLatLng && (!e.target._radius || e.target._radius <= 10); if (isMarker) { // we want the clicked latlng / point, so we overwrite the property e.latlng - e.containerPoint = this._map.pointerEventToContainerPoint(e.originalEvent); + e.containerPoint = this._map.pointerEventToContainerPoint( + e.originalEvent + ); e.latlng = this._map.containerPointToLatLng(e.containerPoint); } }, diff --git a/src/js/Mixins/Keyboard.js b/src/js/Mixins/Keyboard.js index 17a162d8..6b4bf115 100644 --- a/src/js/Mixins/Keyboard.js +++ b/src/js/Mixins/Keyboard.js @@ -1,6 +1,6 @@ // use function to create a new mixin object for keeping isolation -import { DomEvent } from "leaflet"; +import { DomEvent } from 'leaflet'; // to make it work for multiple map instances const createKeyboardMixins = () => ({ diff --git a/src/js/Mixins/MarkerLimits.js b/src/js/Mixins/MarkerLimits.js index 70466559..6aaf63f5 100644 --- a/src/js/Mixins/MarkerLimits.js +++ b/src/js/Mixins/MarkerLimits.js @@ -1,4 +1,4 @@ -import { Util } from "leaflet"; +import { Util } from 'leaflet'; const MarkerLimits = { filterMarkerGroup() { diff --git a/src/js/Mixins/Modes/Mode.Drag.js b/src/js/Mixins/Modes/Mode.Drag.js index 15523151..39bae431 100644 --- a/src/js/Mixins/Modes/Mode.Drag.js +++ b/src/js/Mixins/Modes/Mode.Drag.js @@ -1,6 +1,6 @@ -import { LayerGroup, Util } from "leaflet"; -import Geoman from "../../L.PM"; -import Utils from "../../L.PM.Utils"; +import { LayerGroup, Util } from 'leaflet'; +import Geoman from '../../L.PM'; +import Utils from '../../L.PM.Utils'; const GlobalDragMode = { _globalDragModeEnabled: false, diff --git a/src/js/Mixins/Modes/Mode.Edit.js b/src/js/Mixins/Modes/Mode.Edit.js index fc4b8ddc..0dda2998 100644 --- a/src/js/Mixins/Modes/Mode.Edit.js +++ b/src/js/Mixins/Modes/Mode.Edit.js @@ -1,6 +1,6 @@ -import { LayerGroup, Util } from "leaflet"; -import Geoman from "../../L.PM"; -import Utils from "../../L.PM.Utils"; +import { LayerGroup, Util } from 'leaflet'; +import Geoman from '../../L.PM'; +import Utils from '../../L.PM.Utils'; // this mixin adds a global edit mode to the map const GlobalEditMode = { diff --git a/src/js/Mixins/Modes/Mode.Removal.js b/src/js/Mixins/Modes/Mode.Removal.js index ff78d909..13cf2658 100644 --- a/src/js/Mixins/Modes/Mode.Removal.js +++ b/src/js/Mixins/Modes/Mode.Removal.js @@ -1,5 +1,5 @@ -import { LayerGroup, Util } from "leaflet"; -import Geoman from "../../L.PM"; +import { LayerGroup, Util } from 'leaflet'; +import Geoman from '../../L.PM'; const GlobalRemovalMode = { _globalRemovalModeEnabled: false, diff --git a/src/js/Mixins/Modes/Mode.Rotate.js b/src/js/Mixins/Modes/Mode.Rotate.js index 761e9a4b..871af302 100644 --- a/src/js/Mixins/Modes/Mode.Rotate.js +++ b/src/js/Mixins/Modes/Mode.Rotate.js @@ -1,6 +1,6 @@ -import { LayerGroup, Polyline, Util } from "leaflet"; -import Geoman from "../../L.PM"; -import Utils from "../../L.PM.Utils"; +import { LayerGroup, Polyline, Util } from 'leaflet'; +import Geoman from '../../L.PM'; +import Utils from '../../L.PM.Utils'; const GlobalRotateMode = { _globalRotateModeEnabled: false, diff --git a/src/js/Mixins/Snapping.js b/src/js/Mixins/Snapping.js index 8dd2eeb9..9d84fe4b 100644 --- a/src/js/Mixins/Snapping.js +++ b/src/js/Mixins/Snapping.js @@ -1,4 +1,14 @@ -import { Circle, CircleMarker, ImageOverlay, LineUtil, Marker, Polygon, Polyline, Rectangle, Util } from 'leaflet'; +import { + Circle, + CircleMarker, + ImageOverlay, + LineUtil, + Marker, + Polygon, + Polyline, + Rectangle, + Util, +} from 'leaflet'; import { hasValues, prioritiseSort } from '../helpers'; import Geoman from '../L.PM'; import Utils from '../L.PM.Utils'; @@ -347,8 +357,7 @@ const SnapMixin = { const map = this._map; // is this a marker? - const isMarker = - layer instanceof Marker || layer instanceof CircleMarker; + const isMarker = layer instanceof Marker || layer instanceof CircleMarker; // is it a polygon? const isPolygon = layer instanceof Polygon; diff --git a/src/js/Toolbar/L.PM.Toolbar.js b/src/js/Toolbar/L.PM.Toolbar.js index 41d787c2..8cbf9045 100644 --- a/src/js/Toolbar/L.PM.Toolbar.js +++ b/src/js/Toolbar/L.PM.Toolbar.js @@ -416,10 +416,7 @@ const Toolbar = Class.extend({ this._addButton('drawRectangle', new PMButton(drawRectButton)); this._addButton('drawPolygon', new PMButton(drawPolyButton)); this._addButton('drawCircle', new PMButton(drawCircleButton)); - this._addButton( - 'drawCircleMarker', - new PMButton(drawCircleMarkerButton) - ); + this._addButton('drawCircleMarker', new PMButton(drawCircleMarkerButton)); this._addButton('drawText', new PMButton(drawTextButton)); this._addButton('editMode', new PMButton(editButton)); this._addButton('dragMode', new PMButton(dragButton)); @@ -575,10 +572,7 @@ const Toolbar = Class.extend({ this.options[options.name] = true; } - const control = this._addButton( - options.name, - new PMButton(_options) - ); + const control = this._addButton(options.name, new PMButton(_options)); this.changeControlOrder(); return control; }, diff --git a/src/js/helpers/Matrix.js b/src/js/helpers/Matrix.js index 863e968f..6aebfe28 100644 --- a/src/js/helpers/Matrix.js +++ b/src/js/helpers/Matrix.js @@ -4,8 +4,8 @@ * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. */ -import { Point } from "leaflet"; -import Geoman from "../L.PM"; +import { Point } from 'leaflet'; +import Geoman from '../L.PM'; /** * @class L.PM.Matrix diff --git a/src/js/helpers/ModeHelper.js b/src/js/helpers/ModeHelper.js index 833678cc..4ff03f09 100644 --- a/src/js/helpers/ModeHelper.js +++ b/src/js/helpers/ModeHelper.js @@ -1,4 +1,4 @@ -import { LatLng, Layer } from "leaflet"; +import { LatLng, Layer } from 'leaflet'; export function _convertLatLng(latlng, matrix, map, zoom) { return map.unproject(matrix.transform(map.project(latlng, zoom)), zoom); From 8b12367715de033a3f42fa3193d31bf2aa798cd6 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sat, 1 Nov 2025 11:15:22 +0100 Subject: [PATCH 11/41] update ecmaVersion to latest --- eslint.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eslint.config.js b/eslint.config.js index 9eb8d5cf..43aea8b9 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -7,7 +7,7 @@ module.exports = [ }, { languageOptions: { - ecmaVersion: 2020, + ecmaVersion: 'latest', globals: { L: 'readonly', window: 'readonly', From 62d2bae5d30e35ec02ff2b01e4c3eeeae6122c29 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sat, 1 Nov 2025 21:02:03 +0100 Subject: [PATCH 12/41] Change classes to ESM classes --- src/js/Draw/L.PM.Draw.Circle.js | 31 ++++-- src/js/Draw/L.PM.Draw.CircleMarker.js | 73 ++++++++----- src/js/Draw/L.PM.Draw.Cut.js | 22 ++-- src/js/Draw/L.PM.Draw.Line.js | 58 ++++++---- src/js/Draw/L.PM.Draw.Marker.js | 34 ++++-- src/js/Draw/L.PM.Draw.Polygon.js | 22 ++-- src/js/Draw/L.PM.Draw.Rectangle.js | 43 +++++--- src/js/Draw/L.PM.Draw.Text.js | 34 +++--- src/js/Draw/L.PM.Draw.js | 141 +++++++++++++----------- src/js/Edit/L.PM.Edit.Circle.js | 52 ++++++--- src/js/Edit/L.PM.Edit.CircleMarker.js | 114 +++++++++++++------- src/js/Edit/L.PM.Edit.ImageOverlay.js | 28 +++-- src/js/Edit/L.PM.Edit.LayerGroup.js | 43 +++++--- src/js/Edit/L.PM.Edit.Line.js | 90 ++++++++++------ src/js/Edit/L.PM.Edit.Marker.js | 46 +++++--- src/js/Edit/L.PM.Edit.Polygon.js | 12 ++- src/js/Edit/L.PM.Edit.Rectangle.js | 36 ++++--- src/js/Edit/L.PM.Edit.Text.js | 68 +++++++----- src/js/Edit/L.PM.Edit.js | 96 ++++++++++------- src/js/L.PM.Map.js | 100 ++++++++++------- src/js/Toolbar/L.Controls.js | 72 ++++++++----- src/js/Toolbar/L.PM.Toolbar.js | 150 +++++++++++++++----------- 22 files changed, 863 insertions(+), 502 deletions(-) diff --git a/src/js/Draw/L.PM.Draw.Circle.js b/src/js/Draw/L.PM.Draw.Circle.js index 57942bb2..5f307825 100644 --- a/src/js/Draw/L.PM.Draw.Circle.js +++ b/src/js/Draw/L.PM.Draw.Circle.js @@ -1,7 +1,7 @@ import { Circle } from 'leaflet'; import Draw from './L.PM.Draw'; -Draw.Circle = Draw.CircleMarker.extend({ +class GeomanDrawCircle extends Draw.CircleMarker { initialize(map) { this._map = map; this._shape = 'Circle'; @@ -11,18 +11,29 @@ Draw.Circle = Draw.CircleMarker.extend({ this._maxRadiusOption = 'maxRadiusCircle'; this._editableOption = 'resizeableCircle'; this._defaultRadius = 100; - }, - _extendingEnable() {}, - _extendingDisable() {}, - _extendingCreateMarker() {}, - isRelevantMarker() {}, + } + + _extendingEnable() {} + + _extendingDisable() {} + + _extendingCreateMarker() {} + + isRelevantMarker() {} + _getMinDistanceInMeter() { return this.options[this._minRadiusOption]; - }, + } + _getMaxDistanceInMeter() { return this.options[this._maxRadiusOption]; - }, + } + _distanceCalculation(A, B) { return this._map.distance(A, B); - }, -}); + } +} + +Draw.Circle = GeomanDrawCircle; + +export default GeomanDrawCircle; diff --git a/src/js/Draw/L.PM.Draw.CircleMarker.js b/src/js/Draw/L.PM.Draw.CircleMarker.js index 5782f26a..d10d8c7c 100644 --- a/src/js/Draw/L.PM.Draw.CircleMarker.js +++ b/src/js/Draw/L.PM.Draw.CircleMarker.js @@ -12,7 +12,7 @@ import { destinationOnLine, getTranslation } from '../helpers'; import Draw from './L.PM.Draw'; import Utils from '../L.PM.Utils'; -Draw.CircleMarker = Draw.extend({ +class GeomanDrawCircleMarker extends Draw { initialize(map) { this._map = map; this._shape = 'CircleMarker'; @@ -24,7 +24,8 @@ Draw.CircleMarker = Draw.extend({ this._maxRadiusOption = 'maxRadiusCircleMarker'; this._editableOption = 'resizeableCircleMarker'; this._defaultRadius = 10; - }, + } + enable(options) { // TODO: Think about if these options could be passed globally for all // instances of L.PM.Draw. So a dev could set drawing style one time as some kind of config @@ -148,7 +149,8 @@ Draw.CircleMarker = Draw.extend({ // fire drawstart event this._fireDrawStart(); this._setGlobalDrawMode(); - }, + } + _extendingEnable() { if (!this.options[this._editableOption] && this.options.markerEditable) { // enable edit mode for existing markers @@ -161,7 +163,8 @@ Draw.CircleMarker = Draw.extend({ // Must be named bringToBack to work with Leaflet functions. this._layer.bringToBack(); - }, + } + disable() { // cancel, if drawing mode isn't even enabled if (!this._enabled) { @@ -205,7 +208,8 @@ Draw.CircleMarker = Draw.extend({ // fire drawend event this._fireDrawEnd(); this._setGlobalDrawMode(); - }, + } + _extendingDisable() { // disable dragging and removing for all markers this._map.eachLayer((layer) => { @@ -213,17 +217,20 @@ Draw.CircleMarker = Draw.extend({ layer.pm.disable(); } }); - }, + } + enabled() { return this._enabled; - }, + } + toggle(options) { if (this.enabled()) { this.disable(); } else { this.enable(options); } - }, + } + _placeCenterMarker(e) { // assign the coordinate of the click to the hintMarker, that's necessary for // mobile where the marker can't follow a cursor @@ -243,7 +250,8 @@ Draw.CircleMarker = Draw.extend({ this._map.on('click', this._finishShape, this); this._placeCircleCenter(); - }, + } + _placeCircleCenter() { const latlng = this._centerMarker.getLatLng(); @@ -261,13 +269,15 @@ Draw.CircleMarker = Draw.extend({ this._fireCenterPlaced(); this._fireChange(this._layer.getLatLng(), 'Draw'); } - }, + } + _syncHintLine() { const latlng = this._centerMarker.getLatLng(); const secondLatLng = this._getNewDestinationOfHintMarker(); // set coords for hintline from marker to last vertex of drawin polyline this._hintline.setLatLngs([latlng, secondLatLng]); - }, + } + _syncCircleRadius() { const A = this._centerMarker.getLatLng(); const B = this._hintMarker.getLatLng(); @@ -287,7 +297,8 @@ Draw.CircleMarker = Draw.extend({ } else { this._layer.setRadius(distance); } - }, + } + _syncHintMarker(e) { // move the cursor marker this._hintMarker.setLatLng(e.latlng); @@ -308,7 +319,8 @@ Draw.CircleMarker = Draw.extend({ ? this._centerMarker.getLatLng() : this._hintMarker.getLatLng(); this._fireChange(latlng, 'Draw'); - }, + } + isRelevantMarker(layer) { return ( layer instanceof CircleMarker && @@ -316,7 +328,8 @@ Draw.CircleMarker = Draw.extend({ layer.pm && !layer._pmTempLayer ); - }, + } + _createMarker(e) { // If snap finish is required but the last marker wasn't snapped, do not finish the shape! if ( @@ -361,13 +374,15 @@ Draw.CircleMarker = Draw.extend({ if (!this.options.continueDrawing) { this.disable(); } - }, + } + _extendingCreateMarker(marker) { if (marker.pm && this.options.markerEditable) { // enable editing for the marker marker.pm.enable(); } - }, + } + _finishShape(e) { // If snap finish is required but the last marker wasn't snapped, do not finish the shape! if ( @@ -427,7 +442,8 @@ Draw.CircleMarker = Draw.extend({ this.enable(); this._hintMarker.setLatLng(hintMarkerLatLng); } - }, + } + _getNewDestinationOfHintMarker() { let secondLatLng = this._hintMarker.getLatLng(); if (this.options[this._editableOption]) { @@ -462,21 +478,24 @@ Draw.CircleMarker = Draw.extend({ } } return secondLatLng; - }, + } + _getMinDistanceInMeter() { return Utils.pxRadiusToMeterRadius( this.options[this._minRadiusOption], this._map, this._centerMarker.getLatLng() ); - }, + } + _getMaxDistanceInMeter() { return Utils.pxRadiusToMeterRadius( this.options[this._maxRadiusOption], this._map, this._centerMarker.getLatLng() ); - }, + } + _handleHintMarkerSnapping() { if (this.options[this._editableOption]) { if (this._hintMarker._snapped) { @@ -501,7 +520,8 @@ Draw.CircleMarker = Draw.extend({ // calculate the new latlng of marker if the snapped latlng radius is out of min/max this._hintMarker.setLatLng(this._getNewDestinationOfHintMarker()); } - }, + } + setStyle() { const templineStyle = {}; Object.assign(templineStyle, this.options.templineStyle); @@ -510,8 +530,13 @@ Draw.CircleMarker = Draw.extend({ } this._layer?.setStyle(templineStyle); this._hintline?.setStyle(this.options.hintlineStyle); - }, + } + _distanceCalculation(A, B) { return this._map.project(A).distanceTo(this._map.project(B)); - }, -}); + } +} + +Draw.CircleMarker = GeomanDrawCircleMarker; + +export default GeomanDrawCircleMarker; diff --git a/src/js/Draw/L.PM.Draw.Cut.js b/src/js/Draw/L.PM.Draw.Cut.js index e93ba149..fe6076c0 100644 --- a/src/js/Draw/L.PM.Draw.Cut.js +++ b/src/js/Draw/L.PM.Draw.Cut.js @@ -13,12 +13,13 @@ import Draw from './L.PM.Draw'; import Geoman from '../L.PM'; import Utils from '../L.PM.Utils'; -Draw.Cut = Draw.Polygon.extend({ +class GeomanCut extends Draw.Polygon { initialize(map) { this._map = map; this._shape = 'Cut'; this.toolbarButtonName = 'cutPolygon'; - }, + } + _finishShape() { this._editedLayers = []; // if self intersection is not allowed, do not finish the shape! @@ -80,7 +81,8 @@ Draw.Cut = Draw.Polygon.extend({ this.enable(); this._hintMarker.setLatLng(hintMarkerLatLng); } - }, + } + cut(layer) { const all = this._map._layers; // contains information about snapping points @@ -231,7 +233,8 @@ Draw.Cut = Draw.Polygon.extend({ originalLayer: l, }); }); - }, + } + _cutLayer(layer, l) { const fg = new GeoJSON(); let diff; @@ -268,6 +271,11 @@ Draw.Cut = Draw.Polygon.extend({ } } return diff; - }, - _change: Util.falseFn, -}); + } + + _change = Util.falseFn; +} + +Draw.Cut = GeomanCut; + +export default GeomanCut; diff --git a/src/js/Draw/L.PM.Draw.Line.js b/src/js/Draw/L.PM.Draw.Line.js index 7ee81579..d887a042 100644 --- a/src/js/Draw/L.PM.Draw.Line.js +++ b/src/js/Draw/L.PM.Draw.Line.js @@ -5,13 +5,14 @@ import { DivIcon, FeatureGroup, Marker, Point, Polyline, Util } from 'leaflet'; import { getTranslation } from '../helpers'; import Utils from '../L.PM.Utils'; -Draw.Line = Draw.extend({ +class GeomanDrawLine extends Draw { initialize(map) { this._map = map; this._shape = 'Line'; this.toolbarButtonName = 'drawPolyline'; this._doesSelfIntersect = false; - }, + } + enable(options) { Util.setOptions(this, options); @@ -108,7 +109,8 @@ Draw.Line = Draw.extend({ // fire drawstart event this._fireDrawStart(); this._setGlobalDrawMode(); - }, + } + disable() { // disable draw mode @@ -147,17 +149,20 @@ Draw.Line = Draw.extend({ // fire drawend event this._fireDrawEnd(); this._setGlobalDrawMode(); - }, + } + enabled() { return this._enabled; - }, + } + toggle(options) { if (this.enabled()) { this.disable(); } else { this.enable(options); } - }, + } + _syncHintLine() { const polyPoints = this._layer.getLatLngs(); @@ -170,7 +175,8 @@ Draw.Line = Draw.extend({ this._hintMarker.getLatLng(), ]); } - }, + } + _syncHintMarker(e) { // move the cursor marker this._hintMarker.setLatLng(e.latlng); @@ -189,12 +195,14 @@ Draw.Line = Draw.extend({ const latlngs = this._layer._defaultShape().slice(); latlngs.push(this._hintMarker.getLatLng()); this._change(latlngs); - }, + } + hasSelfIntersection() { // check for self intersection of the layer and return true/false const selfIntersection = kinks(this._layer.toGeoJSON(15)); return selfIntersection.features.length > 0; - }, + } + _handleSelfIntersection(addVertex, latlng) { // ok we need to check the self intersection here // problem: during draw, the marker on the cursor is not yet part @@ -233,7 +241,8 @@ Draw.Line = Draw.extend({ this.isRed = false; this._hintline.setStyle(this.options.hintlineStyle); } - }, + } + _createVertex(e) { // don't create a vertex if we have a selfIntersection and it is not allowed if (!this.options.allowSelfIntersection) { @@ -289,11 +298,13 @@ Draw.Line = Draw.extend({ if (this.options.finishOn === 'snap' && this._hintMarker._snapped) { this._finishShape(e); } - }, + } + _setHintLineAfterNewVertex(hintMarkerLatLng) { // make the new drawn line (with another style) visible this._hintline.setLatLngs([hintMarkerLatLng, hintMarkerLatLng]); - }, + } + _removeLastVertex() { const markers = this._markers; @@ -335,7 +346,8 @@ Draw.Line = Draw.extend({ this._fireVertexRemoved(removedMarker, indexPath, 'Draw'); this._change(this._layer.getLatLngs()); - }, + } + _finishShape() { // if self intersection is not allowed, do not finish the shape! if (!this.options.allowSelfIntersection) { @@ -384,7 +396,8 @@ Draw.Line = Draw.extend({ this.enable(); this._hintMarker.setLatLng(hintMarkerLatLng); } - }, + } + _createMarker(latlng) { // create the new marker const marker = new Marker(latlng, { @@ -402,7 +415,8 @@ Draw.Line = Draw.extend({ marker.on('click', this._finishShape, this); return marker; - }, + } + _setTooltipText() { const { length } = this._layer.getLatLngs().flat(); let text = ''; @@ -414,12 +428,18 @@ Draw.Line = Draw.extend({ text = getTranslation('tooltips.finishLine'); } this._hintMarker.setTooltipContent(text); - }, + } + _change(latlngs) { this._fireChange(latlngs, 'Draw'); - }, + } + setStyle() { this._layer?.setStyle(this.options.templineStyle); this._hintline?.setStyle(this.options.hintlineStyle); - }, -}); + } +} + +Draw.Line = GeomanDrawLine; + +export default GeomanDrawLine; diff --git a/src/js/Draw/L.PM.Draw.Marker.js b/src/js/Draw/L.PM.Draw.Marker.js index ff16c374..cf158845 100644 --- a/src/js/Draw/L.PM.Draw.Marker.js +++ b/src/js/Draw/L.PM.Draw.Marker.js @@ -2,14 +2,15 @@ import { Marker, Point, Util } from 'leaflet'; import { getTranslation } from '../helpers'; import Draw from './L.PM.Draw'; -Draw.Marker = Draw.extend({ +class GeomanDrawMarker extends Draw { initialize(map) { this._map = map; this._shape = 'Marker'; this.toolbarButtonName = 'drawMarker'; // with _layerIsDragging we check if a marker is currently dragged and disable marker creation this._layerIsDragging = false; - }, + } + enable(options) { // TODO: Think about if these options could be passed globally for all // instances of L.PM.Draw. So a dev could set drawing style one time as some kind of config @@ -67,7 +68,8 @@ Draw.Marker = Draw.extend({ // fire drawstart event this._fireDrawStart(); this._setGlobalDrawMode(); - }, + } + disable() { // cancel, if drawing mode isn't even enabled if (!this._enabled) { @@ -107,17 +109,20 @@ Draw.Marker = Draw.extend({ // fire drawend event this._fireDrawEnd(); this._setGlobalDrawMode(); - }, + } + enabled() { return this._enabled; - }, + } + toggle(options) { if (this.enabled()) { this.disable(); } else { this.enable(options); } - }, + } + isRelevantMarker(layer) { return ( layer instanceof Marker && @@ -125,7 +130,8 @@ Draw.Marker = Draw.extend({ !layer._pmTempLayer && !layer.pm._initTextMarker ); - }, + } + _syncHintMarker(e) { // move the cursor marker this._hintMarker.setLatLng(e.latlng); @@ -138,7 +144,8 @@ Draw.Marker = Draw.extend({ } this._fireChange(this._hintMarker.getLatLng(), 'Draw'); - }, + } + _createMarker(e) { if (!e.latlng || this._layerIsDragging) { return; @@ -189,10 +196,15 @@ Draw.Marker = Draw.extend({ if (!this.options.continueDrawing) { this.disable(); } - }, + } + setStyle() { if (this.options.markerStyle?.icon) { this._hintMarker?.setIcon(this.options.markerStyle.icon); } - }, -}); + } +} + +Draw.Marker = GeomanDrawMarker; + +export default GeomanDrawMarker; diff --git a/src/js/Draw/L.PM.Draw.Polygon.js b/src/js/Draw/L.PM.Draw.Polygon.js index 352d5d4e..9d799341 100644 --- a/src/js/Draw/L.PM.Draw.Polygon.js +++ b/src/js/Draw/L.PM.Draw.Polygon.js @@ -2,17 +2,19 @@ import { DivIcon, Marker, Polygon } from 'leaflet'; import { getTranslation } from '../helpers'; import Draw from './L.PM.Draw'; -Draw.Polygon = Draw.Line.extend({ +class GeomanDrawPolygon extends Draw.Line { initialize(map) { this._map = map; this._shape = 'Polygon'; this.toolbarButtonName = 'drawPolygon'; - }, + } + enable(options) { Draw.Line.prototype.enable.call(this, options); // Overwrite the shape "Line" of this._layer this._layer.pm._shape = 'Polygon'; - }, + } + _createMarker(latlng) { // create the new marker const marker = new Marker(latlng, { @@ -46,7 +48,8 @@ Draw.Polygon = Draw.Line.extend({ } return marker; - }, + } + _setTooltipText() { const { length } = this._layer.getLatLngs().flat(); let text = ''; @@ -58,7 +61,8 @@ Draw.Polygon = Draw.Line.extend({ text = getTranslation('tooltips.finishPoly'); } this._hintMarker.setTooltipContent(text); - }, + } + _finishShape() { // if self intersection is not allowed, do not finish the shape! if (!this.options.allowSelfIntersection) { @@ -110,5 +114,9 @@ Draw.Polygon = Draw.Line.extend({ this.enable(); this._hintMarker.setLatLng(hintMarkerLatLng); } - }, -}); + } +} + +Draw.Polygon = GeomanDrawPolygon; + +export default GeomanDrawPolygon; diff --git a/src/js/Draw/L.PM.Draw.Rectangle.js b/src/js/Draw/L.PM.Draw.Rectangle.js index 8ec5af09..27caf505 100644 --- a/src/js/Draw/L.PM.Draw.Rectangle.js +++ b/src/js/Draw/L.PM.Draw.Rectangle.js @@ -3,12 +3,13 @@ import { fixLatOffset, getTranslation } from '../helpers'; import Draw from './L.PM.Draw'; import Utils from '../L.PM.Utils'; -Draw.Rectangle = Draw.extend({ +class GeomanDrawRectangle extends Draw { initialize(map) { this._map = map; this._shape = 'Rectangle'; this.toolbarButtonName = 'drawRectangle'; - }, + } + enable(options) { // TODO: Think about if these options could be passed globally for all // instances of L.PM.Draw. So a dev could set drawing style one time as some kind of config @@ -110,7 +111,8 @@ Draw.Rectangle = Draw.extend({ // fire drawstart event this._fireDrawStart(); this._setGlobalDrawMode(); - }, + } + disable() { // disable drawing mode @@ -142,17 +144,20 @@ Draw.Rectangle = Draw.extend({ // fire drawend event this._fireDrawEnd(); this._setGlobalDrawMode(); - }, + } + enabled() { return this._enabled; - }, + } + toggle(options) { if (this.enabled()) { this.disable(); } else { this.enable(options); } - }, + } + _placeStartingMarkers(e) { // assign the coordinate of the click to the hintMarker, that's necessary for // mobile where the marker can't follow a cursor @@ -182,7 +187,8 @@ Draw.Rectangle = Draw.extend({ this._hintMarker.setTooltipContent(getTranslation('tooltips.finishRect')); this._setRectangleOrigin(); - }, + } + _setRectangleOrigin() { const latlng = this._startMarker.getLatLng(); @@ -194,7 +200,8 @@ Draw.Rectangle = Draw.extend({ this._hintMarker.on('move', this._syncRectangleSize, this); } - }, + } + _syncHintMarker(e) { // move the cursor marker this._hintMarker.setLatLng(e.latlng); @@ -211,7 +218,8 @@ Draw.Rectangle = Draw.extend({ ? this._layer.getLatLngs() : [this._hintMarker.getLatLng()]; this._fireChange(latlngs, 'Draw'); - }, + } + _syncRectangleSize() { const A = fixLatOffset(this._startMarker.getLatLng(), this._map); const B = fixLatOffset(this._hintMarker.getLatLng(), this._map); @@ -246,7 +254,8 @@ Draw.Rectangle = Draw.extend({ } }); } - }, + } + _findCorners() { const latlngs = this._layer.getLatLngs()[0]; return Utils._getRotatedRectangle( @@ -255,7 +264,8 @@ Draw.Rectangle = Draw.extend({ this.options.rectangleAngle || 0, this._map ); - }, + } + _finishShape(e) { // assign the coordinate of the click to the hintMarker, that's necessary for // mobile where the marker can't follow a cursor @@ -314,8 +324,13 @@ Draw.Rectangle = Draw.extend({ this.enable(); this._hintMarker.setLatLng(hintMarkerLatLng); } - }, + } + setStyle() { this._layer?.setStyle(this.options.pathOptions); - }, -}); + } +} + +Draw.Rectangle = GeomanDrawRectangle; + +export default GeomanDrawRectangle; diff --git a/src/js/Draw/L.PM.Draw.Text.js b/src/js/Draw/L.PM.Draw.Text.js index 6000012e..03422cc4 100644 --- a/src/js/Draw/L.PM.Draw.Text.js +++ b/src/js/Draw/L.PM.Draw.Text.js @@ -2,12 +2,13 @@ import { DivIcon, Marker, Point, Util } from 'leaflet'; import { getTranslation } from '../helpers'; import Draw from './L.PM.Draw'; -Draw.Text = Draw.extend({ +class GeomanDrawText extends Draw { initialize(map) { this._map = map; this._shape = 'Text'; this.toolbarButtonName = 'drawText'; - }, + } + enable(options) { // TODO: Think about if these options could be passed globally for all // instances of L.PM.Draw. So a dev could set drawing style one time as some kind of config @@ -61,7 +62,8 @@ Draw.Text = Draw.extend({ // fire drawstart event this._fireDrawStart(); this._setGlobalDrawMode(); - }, + } + disable() { // cancel, if drawing mode isn't even enabled if (!this._enabled) { @@ -95,17 +97,20 @@ Draw.Text = Draw.extend({ // fire drawend event this._fireDrawEnd(); this._setGlobalDrawMode(); - }, + } + enabled() { return this._enabled; - }, + } + toggle(options) { if (this.enabled()) { this.disable(); } else { this.enable(options); } - }, + } + _syncHintMarker(e) { // move the cursor marker this._hintMarker.setLatLng(e.latlng); @@ -116,7 +121,8 @@ Draw.Text = Draw.extend({ fakeDragEvent.target = this._hintMarker; this._handleSnapping(fakeDragEvent); } - }, + } + _createMarker(e) { if (!e.latlng) { return; @@ -187,24 +193,28 @@ Draw.Text = Draw.extend({ // the user is still typing some text, so we re-enable the layer after moving the pointer this._map.once('pointermove', this._showHintMarkerAfterMoving, this); } - }, + } _showHintMarkerAfterMoving(e) { this.enable(); this._hintMarker.setLatLng(e.latlng); - }, + } _createTextArea() { const textArea = document.createElement('textarea'); textArea.readOnly = true; textArea.classList.add('pm-textarea', 'pm-disabled'); return textArea; - }, + } _createTextIcon(textArea) { return new DivIcon({ className: 'pm-text-marker', html: textArea, }); - }, -}); + } +} + +Draw.Text = GeomanDrawText; + +export default GeomanDrawText; diff --git a/src/js/Draw/L.PM.Draw.js b/src/js/Draw/L.PM.Draw.js index a96388d4..08bc2b56 100644 --- a/src/js/Draw/L.PM.Draw.js +++ b/src/js/Draw/L.PM.Draw.js @@ -13,54 +13,62 @@ import EventMixin from '../Mixins/Events'; import SnapMixin from '../Mixins/Snapping'; import Utils from '../L.PM.Utils'; -const Draw = Class.extend({ - includes: [SnapMixin, EventMixin], - options: { - snappable: true, // TODO: next major Release, rename it to allowSnapping - snapDistance: 20, - snapMiddle: false, - allowSelfIntersection: true, - tooltips: true, - templineStyle: {}, - hintlineStyle: { - color: '#3388ff', - dashArray: '5,5', - }, - pathOptions: null, - cursorMarker: true, - finishOn: null, - markerStyle: { - draggable: true, - icon: new Icon(), - }, - hideMiddleMarkers: false, - minRadiusCircle: null, - maxRadiusCircle: null, - minRadiusCircleMarker: null, - maxRadiusCircleMarker: null, - resizeableCircleMarker: false, - resizeableCircle: true, - markerEditable: true, - continueDrawing: false, - snapSegment: true, - requireSnapToFinish: false, - rectangleAngle: 0, - textOptions: { - text: null, - focusAfterDraw: null, - removeIfEmpty: null, - className: null, - }, - snapVertex: true, - }, +export default class Draw extends Class { + static { + this.include(SnapMixin); + this.include(EventMixin); + + this.setDefaultOptions({ + snappable: true, // TODO: next major Release, rename it to allowSnapping + snapDistance: 20, + snapMiddle: false, + allowSelfIntersection: true, + tooltips: true, + templineStyle: {}, + hintlineStyle: { + color: '#3388ff', + dashArray: '5,5', + }, + pathOptions: null, + cursorMarker: true, + finishOn: null, + markerStyle: { + draggable: true, + icon: new Icon(), + }, + hideMiddleMarkers: false, + minRadiusCircle: null, + maxRadiusCircle: null, + minRadiusCircleMarker: null, + maxRadiusCircleMarker: null, + resizeableCircleMarker: false, + resizeableCircle: true, + markerEditable: true, + continueDrawing: false, + snapSegment: true, + requireSnapToFinish: false, + rectangleAngle: 0, + textOptions: { + text: null, + focusAfterDraw: null, + removeIfEmpty: null, + className: null, + }, + snapVertex: true, + }); + } + setOptions(options) { Util.setOptions(this, options); this.setStyle(this.options); - }, - setStyle() {}, + } + + setStyle() {} + getOptions() { return this.options; - }, + } + initialize(map) { // Overwriting the default tooltipAnchor of the default Marker Icon, because the tooltip functionality was updated but not the anchor in the Icon // Issue https://github.com/Leaflet/Leaflet/issues/7302 - Leaflet v1.7.1 @@ -91,22 +99,26 @@ const Draw = Class.extend({ // TODO: Remove this with the next major release this.Marker.setOptions({ continueDrawing: true }); this.CircleMarker.setOptions({ continueDrawing: true }); - }, + } + setPathOptions(options, mergeOptions = false) { if (!mergeOptions) { this.options.pathOptions = options; } else { this.options.pathOptions = merge(this.options.pathOptions, options); } - }, + } + getShapes() { // if somebody wants to know what shapes are available return this.shapes; - }, + } + getShape() { // return the shape of the current drawing layer return this._shape; - }, + } + enable(shape, options) { if (!shape) { throw new Error( @@ -121,7 +133,8 @@ const Draw = Class.extend({ // enable draw for a shape this[shape].enable(options); - }, + } + disable() { // there can only be one drawing mode active at a time on a map // so it doesn't matter which one should be disabled. @@ -129,13 +142,15 @@ const Draw = Class.extend({ this.shapes.forEach((shape) => { this[shape].disable(); }); - }, + } + addControls() { // add control buttons for our shapes this.shapes.forEach((shape) => { this[shape].addButton(); }); - }, + } + getActiveShape() { // returns the active shape let enabledShape; @@ -145,7 +160,8 @@ const Draw = Class.extend({ } }); return enabledShape; - }, + } + _setGlobalDrawMode() { // extended to all PM.Draw shapes if (this._shape === 'Cut') { @@ -179,7 +195,7 @@ const Draw = Class.extend({ Utils.enablePopup(layer); }); } - }, + } createNewDrawInstance(name, jsClass) { const instance = this._getShapeFromBtnName(jsClass); @@ -203,7 +219,8 @@ const Draw = Class.extend({ this[name].setOptions(this[name].options); return this[name]; - }, + } + _getShapeFromBtnName(name) { const shapeMapping = { drawMarker: 'Marker', @@ -224,7 +241,8 @@ const Draw = Class.extend({ return shapeMapping[name]; } return this[name] ? this[name]._shape : name; - }, + } + _finishLayer(layer) { if (layer.pm) { // add the pm options from drawing to the new layer (edit) @@ -235,10 +253,12 @@ const Draw = Class.extend({ layer.pm._map = this._map; } this._addDrawnLayerProp(layer); - }, + } + _addDrawnLayerProp(layer) { layer._drawnByGeoman = true; - }, + } + _setPane(layer, type) { if (type === 'layerPane') { layer.options.pane = @@ -256,11 +276,10 @@ const Draw = Class.extend({ this._map.pm.globalOptions.panes.markerPane) || 'markerPane'; } - }, + } + _isFirstLayer() { const map = this._map || this._layer._map; return map.pm.getGeomanLayers().length === 0; - }, -}); - -export default Draw; + } +} diff --git a/src/js/Edit/L.PM.Edit.Circle.js b/src/js/Edit/L.PM.Edit.Circle.js index 7724b24a..9978ad4b 100644 --- a/src/js/Edit/L.PM.Edit.Circle.js +++ b/src/js/Edit/L.PM.Edit.Circle.js @@ -1,8 +1,9 @@ import Edit from './L.PM.Edit'; import Utils from '../L.PM.Utils'; -Edit.Circle = Edit.CircleMarker.extend({ - _shape: 'Circle', +class GeomanEditCircle extends Edit.CircleMarker { + _shape = 'Circle'; + initialize(layer) { this._layer = layer; this._enabled = false; @@ -12,12 +13,15 @@ Edit.Circle = Edit.CircleMarker.extend({ this._editableOption = 'resizeableCircle'; // create polygon around the circle border this._updateHiddenPolyCircle(); - }, + } + enable(options) { // TODO: this can be removed after the default options of CircleMarker.enable are removed Edit.CircleMarker.prototype.enable.call(this, options || {}); - }, - _extendingEnable() {}, + } + + _extendingEnable() {} + _extendingDisable() { this._layer.off('remove', this.disable, this); @@ -26,12 +30,18 @@ Edit.Circle = Edit.CircleMarker.extend({ ? this._layer._path : this._layer._renderer._container; el.classList.remove('leaflet-pm-draggable'); - }, - _extendingApplyOptions() {}, - _syncMarkers() {}, - _removeMarker() {}, - _onDragStart() {}, - _extedingMarkerDragEnd() {}, + } + + _extendingApplyOptions() {} + + _syncMarkers() {} + + _removeMarker() {} + + _onDragStart() {} + + _extedingMarkerDragEnd() {} + _updateHiddenPolyCircle() { const crsSimple = this._map && this._map.pm._isCRSSimple(); if (this._hiddenPolyCircle) { @@ -49,16 +59,20 @@ Edit.Circle = Edit.CircleMarker.extend({ if (!this._hiddenPolyCircle._parentCopy) { this._hiddenPolyCircle._parentCopy = this._layer; } - }, + } + _distanceCalculation(A, B) { return this._map.distance(A, B); - }, + } + _getMinDistanceInMeter() { return this.options[this._minRadiusOption]; - }, + } + _getMaxDistanceInMeter() { return this.options[this._maxRadiusOption]; - }, + } + _onVertexClick(e) { const vertex = e.target; if (vertex._dragging) { @@ -66,5 +80,9 @@ Edit.Circle = Edit.CircleMarker.extend({ } this._fireVertexClick(e, undefined); - }, -}); + } +} + +Edit.Circle = GeomanEditCircle; + +export default GeomanEditCircle; diff --git a/src/js/Edit/L.PM.Edit.CircleMarker.js b/src/js/Edit/L.PM.Edit.CircleMarker.js index bf2919ec..adc8ebc5 100644 --- a/src/js/Edit/L.PM.Edit.CircleMarker.js +++ b/src/js/Edit/L.PM.Edit.CircleMarker.js @@ -11,8 +11,9 @@ import { destinationOnLine } from '../helpers'; import Edit from './L.PM.Edit'; import Utils from '../L.PM.Utils'; -Edit.CircleMarker = Edit.extend({ - _shape: 'CircleMarker', +class GeomanEditCircleMarker extends Edit { + _shape = 'CircleMarker'; + initialize(layer) { this._layer = layer; this._enabled = false; @@ -23,7 +24,8 @@ Edit.CircleMarker = Edit.extend({ // create polygon around the circle border this._updateHiddenPolyCircle(); - }, + } + // TODO: remove default option in next major Release enable(options = { draggable: true, snappable: true }) { Util.setOptions(this, options); @@ -61,13 +63,15 @@ Edit.CircleMarker = Edit.extend({ this._updateHiddenPolyCircle(); this._fireEnable(); - }, + } + _extendingEnable() { // if CircleMarker is dragged while draw mode this._layer.on('pm:dragstart', this._onDragStart, this); this._layer.on('pm:drag', this._onMarkerDrag, this); this._layer.on('pm:dragend', this._onMarkerDragEnd, this); - }, + } + disable() { // prevent disabling if layer is being dragged if (this.dragging()) { @@ -114,20 +118,24 @@ Edit.CircleMarker = Edit.extend({ this._fireDisable(); this._enabled = false; - }, + } + _extendingDisable() { this._layer.off('contextmenu', this._removeMarker, this); - }, + } + enabled() { return this._enabled; - }, + } + toggleEdit(options) { if (!this.enabled()) { this.enable(options); } else { this.disable(); } - }, + } + applyOptions() { if (this.options[this._editableOption]) { this._initMarkers(); @@ -159,13 +167,15 @@ Edit.CircleMarker = Edit.extend({ } this._extendingApplyOptions(); - }, + } + _extendingApplyOptions() { // enable removal for the marker if (!this.options.preventMarkerRemoval) { this._layer.on('contextmenu', this._removeMarker, this); } - }, + } + _initMarkers() { const map = this._map; @@ -190,12 +200,14 @@ Edit.CircleMarker = Edit.extend({ this._outerMarker = this._createOuterMarker(outer); this._markers = [this._centerMarker, this._outerMarker]; this._createHintLine(this._centerMarker, this._outerMarker); - }, + } + _getLatLngOnCircle(center, radius) { const pointA = this._map.project(center); const pointB = new Point(pointA.x + radius, pointA.y); return this._map.unproject(pointB); - }, + } + _createHintLine(markerA, markerB) { const A = markerA.getLatLng(); const B = markerB.getLatLng(); @@ -203,7 +215,8 @@ Edit.CircleMarker = Edit.extend({ this._setPane(this._hintline, 'layerPane'); this._hintline._pmTempLayer = true; this._helperLayers.addLayer(this._hintline); - }, + } + _createCenterMarker(latlng) { const marker = this._createMarker(latlng); if (this.options.draggable) { @@ -213,12 +226,14 @@ Edit.CircleMarker = Edit.extend({ marker.dragging.disable(); } return marker; - }, + } + _createOuterMarker(latlng) { const marker = this._createMarker(latlng); marker.on('drag', this._resizeCircle, this); return marker; - }, + } + _createMarker(latlng) { const marker = new Marker(latlng, { draggable: true, @@ -237,7 +252,7 @@ Edit.CircleMarker = Edit.extend({ this._helperLayers.addLayer(marker); return marker; - }, + } _moveCircle(e) { const draggedMarker = e.target; @@ -260,7 +275,8 @@ Edit.CircleMarker = Edit.extend({ this._fireCenterPlaced('Edit'); this._fireChange(this._layer.getLatLng(), 'Edit'); - }, + } + _syncMarkers() { const center = this._layer.getLatLng(); const radius = this._layer._radius; @@ -269,12 +285,14 @@ Edit.CircleMarker = Edit.extend({ this._centerMarker.setLatLng(center); this._syncHintLine(); this._updateHiddenPolyCircle(); - }, + } + _resizeCircle() { this._outerMarker.setLatLng(this._getNewDestinationOfOuterMarker()); this._syncHintLine(); this._syncCircleRadius(); - }, + } + _syncCircleRadius() { const A = this._centerMarker.getLatLng(); const B = this._outerMarker.getLatLng(); @@ -297,13 +315,15 @@ Edit.CircleMarker = Edit.extend({ this._updateHiddenPolyCircle(); this._fireChange(this._layer.getLatLng(), 'Edit'); - }, + } + _syncHintLine() { const A = this._centerMarker.getLatLng(); const B = this._outerMarker.getLatLng(); // set coords for hintline from marker to last vertex of drawin polyline this._hintline.setLatLngs([A, B]); - }, + } + _removeMarker() { if (this.options[this._editableOption]) { this.disable(); @@ -311,17 +331,20 @@ Edit.CircleMarker = Edit.extend({ this._layer.remove(); this._fireRemove(this._layer); this._fireRemove(this._map, this._layer); - }, + } + _onDragStart() { this._map.pm.Draw.CircleMarker._layerIsDragging = true; - }, + } + _onMarkerDragStart(e) { if (!this._vertexValidation('move', e)) { return; } this._fireMarkerDragStart(e); - }, + } + _onMarkerDrag(e) { // dragged marker const draggedMarker = e.target; @@ -333,7 +356,8 @@ Edit.CircleMarker = Edit.extend({ } this._fireMarkerDrag(e); - }, + } + _onMarkerDragEnd(e) { this._extedingMarkerDragEnd(); @@ -347,10 +371,12 @@ Edit.CircleMarker = Edit.extend({ this._layerEdited = true; } this._fireMarkerDragEnd(e); - }, + } + _extedingMarkerDragEnd() { this._map.pm.Draw.CircleMarker._layerIsDragging = false; - }, + } + // _initSnappableMarkers when option editable is not true _initSnappableMarkersDrag() { const marker = this._layer; @@ -367,7 +393,8 @@ Edit.CircleMarker = Edit.extend({ marker.off('pm:dragstart', this._unsnap, this); marker.on('pm:dragstart', this._unsnap, this); - }, + } + // _disableSnapping when option editable is not true _disableSnappingDrag() { const marker = this._layer; @@ -375,7 +402,8 @@ Edit.CircleMarker = Edit.extend({ marker.off('pm:drag', this._handleSnapping, this); marker.off('pm:dragend', this._cleanupSnapping, this); marker.off('pm:dragstart', this._unsnap, this); - }, + } + _updateHiddenPolyCircle() { const map = this._layer._map || this._map; if (map) { @@ -400,7 +428,8 @@ Edit.CircleMarker = Edit.extend({ this._hiddenPolyCircle._parentCopy = this._layer; } } - }, + } + _getNewDestinationOfOuterMarker() { const latlng = this._centerMarker.getLatLng(); let secondLatLng = this._outerMarker.getLatLng(); @@ -429,7 +458,8 @@ Edit.CircleMarker = Edit.extend({ ); } return secondLatLng; - }, + } + _handleOuterMarkerSnapping() { if (this._outerMarker._snapped) { const latlng = this._centerMarker.getLatLng(); @@ -449,24 +479,28 @@ Edit.CircleMarker = Edit.extend({ } // calculate the new latlng of marker if radius is out of min/max this._outerMarker.setLatLng(this._getNewDestinationOfOuterMarker()); - }, + } + _distanceCalculation(A, B) { return this._map.project(A).distanceTo(this._map.project(B)); - }, + } + _getMinDistanceInMeter(latlng) { return Utils.pxRadiusToMeterRadius( this.options[this._minRadiusOption], this._map, latlng ); - }, + } + _getMaxDistanceInMeter(latlng) { return Utils.pxRadiusToMeterRadius( this.options[this._maxRadiusOption], this._map, latlng ); - }, + } + _onVertexClick(e) { const vertex = e.target; if (vertex._dragging) { @@ -474,5 +508,9 @@ Edit.CircleMarker = Edit.extend({ } this._fireVertexClick(e, undefined); - }, -}); + } +} + +Edit.CircleMarker = GeomanEditCircleMarker; + +export default GeomanEditCircleMarker; diff --git a/src/js/Edit/L.PM.Edit.ImageOverlay.js b/src/js/Edit/L.PM.Edit.ImageOverlay.js index fb612ced..ea4f81ff 100644 --- a/src/js/Edit/L.PM.Edit.ImageOverlay.js +++ b/src/js/Edit/L.PM.Edit.ImageOverlay.js @@ -1,22 +1,26 @@ import { Util } from 'leaflet'; import Edit from './L.PM.Edit'; -Edit.ImageOverlay = Edit.extend({ - _shape: 'ImageOverlay', +class GeomanEditImageOverlay extends Edit { + _shape = 'ImageOverlay'; + initialize(layer) { this._layer = layer; this._enabled = false; - }, + } + toggleEdit(options) { if (!this.enabled()) { this.enable(options); } else { this.disable(); } - }, + } + enabled() { return this._enabled; - }, + } + // TODO: remove default option in next major Release enable(options = { draggable: true, snappable: true }) { Util.setOptions(this, options); @@ -50,7 +54,8 @@ Edit.ImageOverlay = Edit.extend({ this._otherSnapLayers = this._findCorners(); this._fireEnable(); - }, + } + disable() { // prevent disabling if layer is being dragged if (this._dragging) { @@ -77,7 +82,8 @@ Edit.ImageOverlay = Edit.extend({ } this._enabled = false; - }, + } + _findCorners() { const corners = this._layer.getBounds(); @@ -87,5 +93,9 @@ Edit.ImageOverlay = Edit.extend({ const southwest = corners.getSouthWest(); return [northwest, northeast, southeast, southwest]; - }, -}); + } +} + +Edit.ImageOverlay = GeomanEditImageOverlay; + +export default GeomanEditImageOverlay; diff --git a/src/js/Edit/L.PM.Edit.LayerGroup.js b/src/js/Edit/L.PM.Edit.LayerGroup.js index a4666c0f..b91240bd 100644 --- a/src/js/Edit/L.PM.Edit.LayerGroup.js +++ b/src/js/Edit/L.PM.Edit.LayerGroup.js @@ -5,7 +5,7 @@ import Geoman from '../L.PM'; // LayerGroup doesn't inherit from L.PM.Edit because it's just calling L.PM.Edit.Polygon // (which inherits from L.PM.Edit) for each layer, // so it's not really a parent class -Edit.LayerGroup = Class.extend({ +class GeomanEditLayerGroup extends Class { initialize(layerGroup) { this._layerGroup = layerGroup; this._layers = this.getLayers(); @@ -72,7 +72,8 @@ Edit.LayerGroup = Class.extend({ Util.throttle(removeThrottle, 100, this), this ); - }, + } + enable(options, _layerIds = []) { if (_layerIds.length === 0) { this._layers = this.getLayers(); @@ -88,7 +89,8 @@ Edit.LayerGroup = Class.extend({ layer.pm.enable(options); } }); - }, + } + disable(_layerIds = []) { if (_layerIds.length === 0) { this._layers = this.getLayers(); @@ -103,7 +105,8 @@ Edit.LayerGroup = Class.extend({ layer.pm.disable(); } }); - }, + } + enabled(_layerIds = []) { if (_layerIds.length === 0) { this._layers = this.getLayers(); @@ -119,7 +122,8 @@ Edit.LayerGroup = Class.extend({ return layer.pm.enabled(); }); return !!enabled; - }, + } + toggleEdit(options, _layerIds = []) { if (_layerIds.length === 0) { this._layers = this.getLayers(); @@ -135,7 +139,8 @@ Edit.LayerGroup = Class.extend({ layer.pm.toggleEdit(options); } }); - }, + } + _initLayer(layer) { // add reference for the group to each layer inside said group by id, a layer can have multiple groups const id = Util.stamp(this._layerGroup); @@ -143,13 +148,15 @@ Edit.LayerGroup = Class.extend({ layer.pm._parentLayerGroup = {}; } layer.pm._parentLayerGroup[id] = this._layerGroup; - }, + } + _removeLayerFromGroup(layer) { if (layer.pm && layer.pm._layerGroup) { const id = Util.stamp(this._layerGroup); delete layer.pm._layerGroup[id]; } - }, + } + dragging() { this._layers = this.getLayers(); if (this._layers) { @@ -157,13 +164,16 @@ Edit.LayerGroup = Class.extend({ return !!dragging; } return false; - }, + } + getOptions() { return this.options; - }, + } + _getMap() { return this._map || this._layers.find((l) => !!l._map)?._map || null; - }, + } + getLayers( deep = false, filterGeoman = true, @@ -205,7 +215,8 @@ Edit.LayerGroup = Class.extend({ ); } return layers; - }, + } + setOptions(options, _layerIds = []) { if (_layerIds.length === 0) { this._layers = this.getLayers(); @@ -223,5 +234,9 @@ Edit.LayerGroup = Class.extend({ } } }); - }, -}); + } +} + +Edit.LayerGroup = GeomanEditLayerGroup; + +export default GeomanEditLayerGroup; diff --git a/src/js/Edit/L.PM.Edit.Line.js b/src/js/Edit/L.PM.Edit.Line.js index d66b19e2..2f4c325a 100644 --- a/src/js/Edit/L.PM.Edit.Line.js +++ b/src/js/Edit/L.PM.Edit.Line.js @@ -23,13 +23,18 @@ import Utils from '../L.PM.Utils'; // So I can get 'b' with: arr[0][0][1]. // Got it? Now you know what is meant when you read "indexPath" around here. Have fun 👍 -Edit.Line = Edit.extend({ - includes: [MarkerLimits], - _shape: 'Line', +class GeomanEditLine extends Edit { + static { + this.include(MarkerLimits); + } + + _shape = 'Line'; + initialize(layer) { this._layer = layer; this._enabled = false; - }, + } + enable(options) { Util.setOptions(this, options); @@ -83,7 +88,8 @@ Edit.Line = Edit.extend({ this.cachedColor = undefined; } this._fireEnable(); - }, + } + disable() { // if it's not enabled, it doesn't need to be disabled if (!this.enabled()) { @@ -120,10 +126,12 @@ Edit.Line = Edit.extend({ } this._layerEdited = false; this._fireDisable(); - }, + } + enabled() { return this._enabled; - }, + } + toggleEdit(options) { if (!this.enabled()) { this.enable(options); @@ -131,14 +139,16 @@ Edit.Line = Edit.extend({ this.disable(); } return this.enabled(); - }, + } + applyOptions() { if (this.options.snappable) { this._initSnappableMarkers(); } else { this._disableSnapping(); } - }, + } + _initMarkers() { const map = this._map; const coords = this._layer.getLatLngs(); @@ -186,7 +196,7 @@ Edit.Line = Edit.extend({ // add markerGroup to map map.addLayer(this._markerGroup); - }, + } // creates initial markers for coordinates _createMarker(latlng) { @@ -216,7 +226,7 @@ Edit.Line = Edit.extend({ this._markerGroup.addLayer(marker); return marker; - }, + } // creates the middle markes between coordinates _createMiddleMarker(leftM, rightM) { @@ -247,7 +257,8 @@ Edit.Line = Edit.extend({ middleMarker.on('movestart', this._onMiddleMarkerMoveStart, this); return middleMarker; - }, + } + _onMiddleMarkerClick(e) { const middleMarker = e.target; @@ -260,7 +271,8 @@ Edit.Line = Edit.extend({ const icon = new DivIcon({ className: 'marker-icon' }); middleMarker.setIcon(icon); this._addMarker(middleMarker, middleMarker.leftM, middleMarker.rightM); - }, + } + _onMiddleMarkerMoveStart(e) { const middleMarker = e.target; middleMarker.on('moveend', this._onMiddleMarkerMoveEnd, this); @@ -274,11 +286,13 @@ Edit.Line = Edit.extend({ // callback as soon as this is fixed: // https://github.com/Leaflet/Leaflet/issues/4484 this._addMarker(middleMarker, middleMarker.leftM, middleMarker.rightM); - }, + } + _onMiddleMarkerMovePrevent(e) { const middleMarker = e.target; this._vertexValidationDrag(middleMarker); - }, + } + _onMiddleMarkerMoveEnd(e) { const middleMarker = e.target; middleMarker.off('move', this._onMiddleMarkerMovePrevent, this); @@ -292,7 +306,8 @@ Edit.Line = Edit.extend({ setTimeout(() => { delete middleMarker._dragging; }, 100); - }, + } + // adds a new marker from a middlemarker _addMarker(newM, leftM, rightM) { // first, make this middlemarker a regular marker @@ -350,13 +365,13 @@ Edit.Line = Edit.extend({ if (this.options.snappable) { this._initSnappableMarkers(); } - }, + } hasSelfIntersection() { // check for self intersection of the layer and return true/false const selfIntersection = kinks(this._layer.toGeoJSON(15)); return selfIntersection.features.length > 0; - }, + } _handleSelfIntersectionOnVertexRemoval() { // check for selfintersection again (mainly to reset the style) @@ -370,7 +385,7 @@ Edit.Line = Edit.extend({ // re-enable markers for the new coords this._initMarkers(); } - }, + } _handleLayerStyle(flash) { const layer = this._layer; @@ -418,7 +433,8 @@ Edit.Line = Edit.extend({ } } return selfIntersection; - }, + } + _flashLayer() { if (!this.cachedColor) { this.cachedColor = this._layer.options.color; @@ -431,7 +447,8 @@ Edit.Line = Edit.extend({ this._layer.setStyle({ color: this.cachedColor }); this.isRed = false; }, 200); - }, + } + _updateDisabledMarkerStyle(markers, disabled) { markers.forEach((marker) => { if (Array.isArray(marker)) { @@ -444,7 +461,8 @@ Edit.Line = Edit.extend({ } } }); - }, + } + _removeMarker(e) { // the marker that should be removed const marker = e.target; @@ -597,7 +615,8 @@ Edit.Line = Edit.extend({ // TODO: maybe fire latlng as well? this._fireVertexRemoved(marker, indexPath); this._fireChange(this._layer.getLatLngs(), 'Edit'); - }, + } + updatePolygonCoordsFromMarkerDrag(marker) { // update polygon coords const coords = this._layer.getLatLngs(); @@ -619,7 +638,7 @@ Edit.Line = Edit.extend({ // set new coords on layer this._layer.setLatLngs(coords); - }, + } _getNeighborMarkers(marker) { const { indexPath, index, parentPath } = Utils.findDeepMarkerIndex( @@ -640,7 +659,8 @@ Edit.Line = Edit.extend({ const nextMarker = markerArr[nextMarkerIndex]; return { prevMarker, nextMarker }; - }, + } + _checkMarkerAllowedToDrag(marker) { const { prevMarker, nextMarker } = this._getNeighborMarkers(marker); @@ -671,7 +691,8 @@ Edit.Line = Edit.extend({ return false; } return true; - }, + } + _onMarkerDragStart(e) { const marker = e.target; this._preventRenderingMarkers(true); @@ -707,7 +728,8 @@ Edit.Line = Edit.extend({ } else { this._markerAllowedToDrag = null; } - }, + } + _onMarkerDrag(e) { // dragged marker const marker = e.target; @@ -782,7 +804,8 @@ Edit.Line = Edit.extend({ } this._fireMarkerDrag(e, indexPath); this._fireChange(this._layer.getLatLngs(), 'Edit'); - }, + } + _onMarkerDragEnd(e) { const marker = e.target; this._preventRenderingMarkers(false); @@ -838,7 +861,8 @@ Edit.Line = Edit.extend({ this._fireEdit(); this._layerEdited = true; this._fireChange(this._layer.getLatLngs(), 'Edit'); - }, + } + _onVertexClick(e) { const vertex = e.target; if (vertex._dragging) { @@ -848,5 +872,9 @@ Edit.Line = Edit.extend({ const { indexPath } = Utils.findDeepMarkerIndex(this._markers, vertex); this._fireVertexClick(e, indexPath); - }, -}); + } +} + +Edit.Line = GeomanEditLine; + +export default GeomanEditLine; diff --git a/src/js/Edit/L.PM.Edit.Marker.js b/src/js/Edit/L.PM.Edit.Marker.js index 021f7193..1f88bb8c 100644 --- a/src/js/Edit/L.PM.Edit.Marker.js +++ b/src/js/Edit/L.PM.Edit.Marker.js @@ -1,8 +1,9 @@ import { Util } from 'leaflet'; import Edit from './L.PM.Edit'; -Edit.Marker = Edit.extend({ - _shape: 'Marker', +class GeomanEditMarker extends Edit { + _shape = 'Marker'; + initialize(layer) { // layer is a marker in this case :-) this._layer = layer; @@ -10,7 +11,8 @@ Edit.Marker = Edit.extend({ // register dragend event e.g. to fire pm:edit this._layer.on('dragend', this._onDragEnd, this); - }, + } + // TODO: remove default option in next major Release enable(options = { draggable: true }) { Util.setOptions(this, options); @@ -37,7 +39,8 @@ Edit.Marker = Edit.extend({ this._layer.on('pm:dragend', this._onMarkerDragEnd, this); this._fireEnable(); - }, + } + disable() { // if it's not enabled, it doesn't need to be disabled if (!this.enabled()) { @@ -58,17 +61,20 @@ Edit.Marker = Edit.extend({ this._fireDisable(); this._enabled = false; - }, + } + enabled() { return this._enabled; - }, + } + toggleEdit(options) { if (!this.enabled()) { this.enable(options); } else { this.disable(); } - }, + } + applyOptions() { if (this.options.snappable) { this._initSnappableMarkers(); @@ -85,24 +91,29 @@ Edit.Marker = Edit.extend({ if (!this.options.preventMarkerRemoval) { this._layer.on('contextmenu', this._removeMarker, this); } - }, + } + _removeMarker(e) { const marker = e.target; marker.remove(); // TODO: find out why this is fired manually, shouldn't it be catched by L.PM.Map 'layerremove'? this._fireRemove(marker); this._fireRemove(this._map, marker); - }, + } + _onDragStart() { this._map.pm.Draw.Marker._layerIsDragging = true; - }, + } + _onMarkerDragEnd() { this._map.pm.Draw.Marker._layerIsDragging = false; - }, + } + _onDragEnd() { this._fireEdit(); this._layerEdited = true; - }, + } + // overwrite initSnappableMarkers from Snapping.js Mixin _initSnappableMarkers() { const marker = this._layer; @@ -119,11 +130,16 @@ Edit.Marker = Edit.extend({ marker.off('pm:dragstart', this._unsnap, this); marker.on('pm:dragstart', this._unsnap, this); - }, + } + _disableSnapping() { const marker = this._layer; marker.off('pm:drag', this._handleSnapping, this); marker.off('pm:dragend', this._cleanupSnapping, this); marker.off('pm:dragstart', this._unsnap, this); - }, -}); + } +} + +Edit.Marker = GeomanEditMarker; + +export default GeomanEditMarker; diff --git a/src/js/Edit/L.PM.Edit.Polygon.js b/src/js/Edit/L.PM.Edit.Polygon.js index 7182a330..36a08ffd 100644 --- a/src/js/Edit/L.PM.Edit.Polygon.js +++ b/src/js/Edit/L.PM.Edit.Polygon.js @@ -2,8 +2,8 @@ import lineIntersect from '@turf/line-intersect'; import { Polyline } from 'leaflet'; import Edit from './L.PM.Edit'; -Edit.Polygon = Edit.Line.extend({ - _shape: 'Polygon', +class GeomanEditPolygon extends Edit.Line { + _shape = 'Polygon'; _checkMarkerAllowedToDrag(marker) { const { prevMarker, nextMarker } = this._getNeighborMarkers(marker); @@ -24,5 +24,9 @@ Edit.Polygon = Edit.Line.extend({ return false; } return true; - }, -}); + } +} + +Edit.Polygon = GeomanEditPolygon; + +export default GeomanEditPolygon; diff --git a/src/js/Edit/L.PM.Edit.Rectangle.js b/src/js/Edit/L.PM.Edit.Rectangle.js index a7b47ced..8cfd7405 100644 --- a/src/js/Edit/L.PM.Edit.Rectangle.js +++ b/src/js/Edit/L.PM.Edit.Rectangle.js @@ -5,8 +5,8 @@ import { calcAngle } from '../helpers'; import Edit from './L.PM.Edit'; import Utils from '../L.PM.Utils'; -Edit.Rectangle = Edit.Polygon.extend({ - _shape: 'Rectangle', +class GeomanEditRectangle extends Edit.Polygon { + _shape = 'Rectangle'; // initializes Rectangle Markers _initMarkers() { const map = this._map; @@ -38,7 +38,8 @@ Edit.Rectangle = Edit.Polygon.extend({ marker.setLatLng(latlng); } }); - }, + } + applyOptions() { if (this.options.snappable) { this._initSnappableMarkers(); @@ -46,7 +47,7 @@ Edit.Rectangle = Edit.Polygon.extend({ this._disableSnapping(); } this._addMarkerEvents(); - }, + } // creates initial markers for coordinates _createMarker(latlng, index) { @@ -65,7 +66,8 @@ Edit.Rectangle = Edit.Polygon.extend({ this._markerGroup.addLayer(marker); return marker; - }, + } + // Add marker events after adding the snapping events to the markers, beacause of the execution order _addMarkerEvents() { this._markers[0].forEach((marker) => { @@ -78,13 +80,14 @@ Edit.Rectangle = Edit.Polygon.extend({ marker.on('contextmenu', this._removeMarker, this); } }); - }, + } + // Empty callback for 'contextmenu' binding set in L.PM.Edit.Line.js's _createMarker method (AKA, right-click on marker event) // (A Rectangle is designed to always remain a "true" rectangle -- if you want it editable, use Polygon Tool instead!!!) _removeMarker() { // The method, it does nothing!!! return null; - }, + } _onMarkerDragStart(e) { if (!this._vertexValidation('move', e)) { @@ -109,7 +112,7 @@ Edit.Rectangle = Edit.Polygon.extend({ ); this._fireMarkerDragStart(e, indexPath); - }, + } _onMarkerDrag(e) { // dragged marker @@ -132,7 +135,7 @@ Edit.Rectangle = Edit.Polygon.extend({ ); this._fireMarkerDrag(e, indexPath); this._fireChange(this._layer.getLatLngs(), 'Edit'); - }, + } _onMarkerDragEnd(e) { // dragged marker @@ -156,7 +159,7 @@ Edit.Rectangle = Edit.Polygon.extend({ this._fireEdit(); this._layerEdited = true; this._fireChange(this._layer.getLatLngs(), 'Edit'); - }, + } // adjusts the rectangle's size and bounds whenever a marker is moved // params: movedMarker -- the Marker object @@ -178,7 +181,7 @@ Edit.Rectangle = Edit.Polygon.extend({ // Redraw the shape (to update altered rectangle) this._layer.redraw(); - }, + } // adjusts the position of all Markers // params: markerLatLngs -- an array of exactly LatLng objects @@ -228,7 +231,8 @@ Edit.Rectangle = Edit.Polygon.extend({ }); } } - }, + } + // finds the 4 corners of the current bounding box // returns array of 4 LatLng objects in this order: Northwest corner, Northeast corner, Southeast corner, Southwest corner _findCorners() { @@ -249,5 +253,9 @@ Edit.Rectangle = Edit.Polygon.extend({ this.getAngle(), this._map || this ); - }, -}); + } +} + +Edit.Rectangle = GeomanEditRectangle; + +export default GeomanEditRectangle; diff --git a/src/js/Edit/L.PM.Edit.Text.js b/src/js/Edit/L.PM.Edit.Text.js index 29a62a44..690a5b08 100644 --- a/src/js/Edit/L.PM.Edit.Text.js +++ b/src/js/Edit/L.PM.Edit.Text.js @@ -2,12 +2,14 @@ import { DomEvent, Util } from 'leaflet'; import Edit from './L.PM.Edit'; import Draw from '../Draw/L.PM.Draw'; -Edit.Text = Edit.extend({ - _shape: 'Text', +class GeomanEditCircleText extends Edit { + _shape = 'Text'; + initialize(layer) { this._layer = layer; this._enabled = false; - }, + } + enable(options) { Util.setOptions(this, options); @@ -46,7 +48,8 @@ Edit.Text = Edit.extend({ this._enabled = true; this._fireEnable(); - }, + } + disable() { // if it's not enabled, it doesn't need to be disabled if (!this.enabled()) { @@ -84,24 +87,28 @@ Edit.Text = Edit.extend({ this._fireDisable(); this._enabled = false; - }, + } + enabled() { return this._enabled; - }, + } + toggleEdit(options) { if (!this.enabled()) { this.enable(options); } else { this.disable(); } - }, + } + applyOptions() { if (this.options.snappable) { this._initSnappableMarkers(); } else { this._disableSnapping(); } - }, + } + // overwrite initSnappableMarkers from Snapping.js Mixin _initSnappableMarkers() { const marker = this._layer; @@ -118,13 +125,15 @@ Edit.Text = Edit.extend({ marker.off('pm:dragstart', this._unsnap, this); marker.on('pm:dragstart', this._unsnap, this); - }, + } + _disableSnapping() { const marker = this._layer; marker.off('pm:drag', this._handleSnapping, this); marker.off('pm:dragend', this._cleanupSnapping, this); marker.off('pm:dragstart', this._unsnap, this); - }, + } + _autoResize() { this.textArea.style.height = '1px'; this.textArea.style.width = '1px'; @@ -136,7 +145,7 @@ Edit.Text = Edit.extend({ this.textArea.style.width = `${width}px`; this._layer.options.text = this.getText(); this._fireTextChange(this.getText()); - }, + } _disableOnBlur() { this._disableOnBlurActive = true; @@ -150,7 +159,8 @@ Edit.Text = Edit.extend({ }); } }, 100); - }, + } + _documentClick(e) { if (e.target !== this.textArea) { this.disable(); @@ -158,7 +168,7 @@ Edit.Text = Edit.extend({ this.remove(); } } - }, + } _focusChange(e = {}) { const focusAlreadySet = this._hasFocus; @@ -177,7 +187,8 @@ Edit.Text = Edit.extend({ } } } - }, + } + _applyFocus() { this.textArea.classList.add('pm-hasfocus'); @@ -190,7 +201,8 @@ Edit.Text = Edit.extend({ } this._map.dragging.disable(); } - }, + } + _removeFocus() { if (this._map.dragging) { if (this._originalMapDragState) { @@ -200,14 +212,14 @@ Edit.Text = Edit.extend({ } this.textArea.classList.remove('pm-hasfocus'); - }, + } focus() { if (!this.enabled()) { throw new TypeError('Layer is not enabled'); } this.textArea.focus(); - }, + } blur() { if (!this.enabled()) { @@ -217,26 +229,26 @@ Edit.Text = Edit.extend({ if (this._disableOnBlurActive) { this.disable(); } - }, + } hasFocus() { return this._hasFocus; - }, + } getElement() { return this.textArea; - }, + } setText(text) { if (text) { this.textArea.value = text; } this._autoResize(); - }, + } getText() { return this.textArea.value; - }, + } _initTextMarker() { this.textArea = Draw.Text.prototype._createTextArea.call(this); @@ -251,7 +263,7 @@ Edit.Text = Edit.extend({ this._layer.setIcon(textAreaIcon); this._layer.once('add', this._createTextMarker, this); - }, + } _createTextMarker(enable = false) { this._layer.off('add', this._createTextMarker, this); @@ -275,10 +287,14 @@ Edit.Text = Edit.extend({ this.focus(); this._disableOnBlur(); } - }, + } // Chrome ignores `user-select: none`, so we need to disable text selection manually _preventTextSelection(e) { e.preventDefault(); - }, -}); + } +} + +Edit.Text = GeomanEditCircleText; + +export default GeomanEditCircleText; diff --git a/src/js/Edit/L.PM.Edit.js b/src/js/Edit/L.PM.Edit.js index 7d09a55c..707be553 100644 --- a/src/js/Edit/L.PM.Edit.js +++ b/src/js/Edit/L.PM.Edit.js @@ -4,48 +4,60 @@ import EventMixin from '../Mixins/Events'; import RotateMixin from '../Mixins/Rotating'; import SnapMixin from '../Mixins/Snapping'; -const Edit = Class.extend({ - includes: [DragMixin, SnapMixin, RotateMixin, EventMixin], - options: { - snappable: true, // TODO: next major Release, rename it to allowSnapping - snapDistance: 20, - allowSelfIntersection: true, - allowSelfIntersectionEdit: false, - preventMarkerRemoval: false, - removeLayerBelowMinVertexCount: true, - limitMarkersToCount: -1, - hideMiddleMarkers: false, - snapSegment: true, - syncLayersOnDrag: false, - draggable: true, // TODO: next major Release, rename it to allowDragging - allowEditing: true, // disable all interactions on a layer which are activated with `enable()`. For example a Circle can't be dragged in Edit-Mode - allowRemoval: true, - allowCutting: true, - allowRotation: true, - addVertexOn: 'click', - removeVertexOn: 'contextmenu', - removeVertexValidation: undefined, - addVertexValidation: undefined, - moveVertexValidation: undefined, - resizeableCircleMarker: false, - resizeableCircle: true, - snapMiddle: false, - snapVertex: true, - }, +export default class Edit extends Class { + static { + this.include(DragMixin); + this.include(SnapMixin); + this.include(RotateMixin); + this.include(EventMixin); + + this.setDefaultOptions({ + snappable: true, // TODO: next major Release, rename it to allowSnapping + snapDistance: 20, + allowSelfIntersection: true, + allowSelfIntersectionEdit: false, + preventMarkerRemoval: false, + removeLayerBelowMinVertexCount: true, + limitMarkersToCount: -1, + hideMiddleMarkers: false, + snapSegment: true, + syncLayersOnDrag: false, + draggable: true, // TODO: next major Release, rename it to allowDragging + allowEditing: true, // disable all interactions on a layer which are activated with `enable()`. For example a Circle can't be dragged in Edit-Mode + allowRemoval: true, + allowCutting: true, + allowRotation: true, + addVertexOn: 'click', + removeVertexOn: 'contextmenu', + removeVertexValidation: undefined, + addVertexValidation: undefined, + moveVertexValidation: undefined, + resizeableCircleMarker: false, + resizeableCircle: true, + snapMiddle: false, + snapVertex: true, + }); + } + setOptions(options) { Util.setOptions(this, options); - }, + } + getOptions() { return this.options; - }, - applyOptions() {}, + } + + applyOptions() {} + isPolygon() { // if it's a polygon, it means the coordinates array is multi dimensional return this._layer instanceof Polygon; - }, + } + getShape() { return this._shape; - }, + } + _setPane(layer, type) { if (type === 'layerPane') { layer.options.pane = @@ -63,11 +75,13 @@ const Edit = Class.extend({ this._map.pm.globalOptions.panes.markerPane) || 'markerPane'; } - }, + } + remove() { const map = this._map || this._layer._map; map.pm.removeLayer({ target: this._layer }); - }, + } + _vertexValidation(type, e) { const marker = e.target; const args = { layer: this._layer, marker, event: e }; @@ -95,7 +109,8 @@ const Edit = Class.extend({ marker._cancelDragEventChain = null; return true; - }, + } + _vertexValidationDrag(marker) { // we reset the marker to the place before it was dragged. We need this, because we can't stop the drag process in a `dragstart` | `movestart` listener if (marker._cancelDragEventChain) { @@ -104,14 +119,13 @@ const Edit = Class.extend({ return false; } return true; - }, + } + _vertexValidationDragEnd(marker) { if (marker._cancelDragEventChain) { marker._cancelDragEventChain = null; return false; } return true; - }, -}); - -export default Edit; + } +} diff --git a/src/js/L.PM.Map.js b/src/js/L.PM.Map.js index 7d890794..e418a8db 100644 --- a/src/js/L.PM.Map.js +++ b/src/js/L.PM.Map.js @@ -13,14 +13,15 @@ import Toolbar from './Toolbar/L.PM.Toolbar'; import Geoman from './L.PM'; import Utils from './L.PM.Utils'; -const Map = Class.extend({ - includes: [ - GlobalEditMode, - GlobalDragMode, - GlobalRemovalMode, - GlobalRotateMode, - EventMixin, - ], +export default class GeomanMap extends Class { + static { + this.include(GlobalEditMode); + this.include(GlobalDragMode); + this.include(GlobalRemovalMode); + this.include(GlobalRotateMode); + this.include(EventMixin); + } + initialize(map) { this.map = map; this.Draw = new Draw(map); @@ -47,7 +48,7 @@ const Map = Class.extend({ }; this.Keyboard._initKeyListener(map); - }, + } setLang(lang = 'en', override, fallback = 'en') { // Normalize the language code to lowercase and trim any whitespace @@ -88,19 +89,23 @@ const Map = Class.extend({ Geoman.activeLang = lang; this.map.pm.Toolbar.reinit(); this._fireLangChange(oldLang, lang, fallback, translations[lang]); - }, + } + addControls(options) { this.Toolbar.addControls(options); - }, + } + removeControls() { this.Toolbar.removeControls(); - }, + } + toggleControls() { this.Toolbar.toggleControls(); - }, + } + controlsVisible() { return this.Toolbar.isVisible; - }, + } enableDraw(shape = 'Polygon', options) { // backwards compatible, remove after 3.0 @@ -109,7 +114,8 @@ const Map = Class.extend({ } this.Draw.enable(shape, options); - }, + } + disableDraw(shape = 'Polygon') { // backwards compatible, remove after 3.0 if (shape === 'Poly') { @@ -117,7 +123,8 @@ const Map = Class.extend({ } this.Draw.disable(shape); - }, + } + // optionsModifier for special options like ignoreShapes or merge setPathOptions(options, optionsModifier = {}) { const ignore = optionsModifier.ignoreShapes || []; @@ -128,11 +135,12 @@ const Map = Class.extend({ this.map.pm.Draw[shape].setPathOptions(options, mergeOptions); } }); - }, + } getGlobalOptions() { return this.globalOptions; - }, + } + setGlobalOptions(o) { // merge passed and existing options const options = merge(this.globalOptions, o); @@ -190,7 +198,8 @@ const Map = Class.extend({ // apply the options (actually trigger the functionality) this.applyGlobalOptions(); - }, + } + applyGlobalOptions() { const layers = Utils.findLayers(this.map); layers.forEach((layer) => { @@ -198,22 +207,28 @@ const Map = Class.extend({ layer.pm.applyOptions(); } }); - }, + } + globalDrawModeEnabled() { return !!this.Draw.getActiveShape(); - }, + } + globalCutModeEnabled() { return !!this.Draw.Cut.enabled(); - }, + } + enableGlobalCutMode(options) { return this.Draw.Cut.enable(options); - }, + } + toggleGlobalCutMode(options) { return this.Draw.Cut.toggle(options); - }, + } + disableGlobalCutMode() { return this.Draw.Cut.disable(); - }, + } + getGeomanLayers(asGroup = false) { const layers = Utils.findLayers(this.map); if (!asGroup) { @@ -225,7 +240,8 @@ const Map = Class.extend({ group.addLayer(layer); }); return group; - }, + } + getGeomanDrawLayers(asGroup = false) { const layers = Utils.findLayers(this.map).filter( (l) => l._drawnByGeoman === true @@ -239,19 +255,23 @@ const Map = Class.extend({ group.addLayer(layer); }); return group; - }, + } + // returns the map instance by default or a layergroup is set through global options _getContainingLayer() { return this.globalOptions.layerGroup && this.globalOptions.layerGroup instanceof LayerGroup ? this.globalOptions.layerGroup : this.map; - }, + } + _isCRSSimple() { return this.map.options.crs === CRS.Simple; - }, + } + // in Canvas mode we need to convert touch- and pointerevents (IE) to mouseevents, because Leaflet don't support them. - _touchEventCounter: 0, + _touchEventCounter = 0; + _addTouchEvents(elm) { if (this._touchEventCounter === 0) { DomEvent.on(elm, 'touchmove', this._canvasTouchMove, this); @@ -263,7 +283,8 @@ const Map = Class.extend({ ); } this._touchEventCounter += 1; - }, + } + _removeTouchEvents(elm) { if (this._touchEventCounter === 1) { DomEvent.off(elm, 'touchmove', this._canvasTouchMove, this); @@ -276,10 +297,12 @@ const Map = Class.extend({ } this._touchEventCounter = this._touchEventCounter <= 1 ? 0 : this._touchEventCounter - 1; - }, + } + _canvasTouchMove(e) { getRenderer(this.map)._onMouseMove(this._createMouseEvent('mousemove', e)); - }, + } + _canvasTouchClick(e) { let type = ''; if (e.type === 'touchstart' || e.type === 'pointerdown') { @@ -293,8 +316,9 @@ const Map = Class.extend({ return; } getRenderer(this.map)._onClick(this._createMouseEvent(type, e)); - }, - _createMouseEvent(type, e) { + } + + static _createMouseEvent(type, e) { let mouseEvent; const touchEvt = e.touches[0] || e.changedTouches[0]; try { @@ -335,7 +359,5 @@ const Map = Class.extend({ ); } return mouseEvent; - }, -}); - -export default Map; + } +} diff --git a/src/js/Toolbar/L.Controls.js b/src/js/Toolbar/L.Controls.js index 7ea9e37c..f9b9d441 100644 --- a/src/js/Toolbar/L.Controls.js +++ b/src/js/Toolbar/L.Controls.js @@ -2,12 +2,16 @@ import { Control, DomEvent, DomUtil } from 'leaflet'; import { getTranslation } from '../helpers'; import EventMixin from '../Mixins/Events'; -const PMButton = Control.extend({ - includes: [EventMixin], - options: { - position: 'topleft', - disableByOtherButtons: true, - }, +export default class PMButton extends Control { + static { + this.include(EventMixin); + + this.setDefaultOptions({ + position: 'topleft', + disableByOtherButtons: true, + }); + } + // TODO: clean up variable names like _button should be _options and that domNodeVariable stuff initialize(options) { this._button = {}; @@ -15,7 +19,8 @@ const PMButton = Control.extend({ this._button[i] = this.options[i]; } Object.assign(this._button, options); - }, + } + onAdd(map) { this._map = map; if (!this._map.pm.Toolbar.options.oneBlock) { @@ -36,7 +41,8 @@ const PMButton = Control.extend({ this._renderButton(); return this._container; - }, + } + _renderButton() { const oldDomNode = this.buttonsDomNode; this.buttonsDomNode = this._makeButton(this._button); @@ -45,22 +51,27 @@ const PMButton = Control.extend({ } else { this._container.appendChild(this.buttonsDomNode); } - }, + } + onRemove() { this.buttonsDomNode.remove(); return this._container; - }, + } + getText() { return this._button.text; - }, + } + getIconUrl() { return this._button.iconUrl; - }, + } + destroy() { this._button = {}; this._update(); - }, + } + toggle(e) { if (typeof e === 'boolean') { this._button.toggleStatus = e; @@ -71,23 +82,28 @@ const PMButton = Control.extend({ this._updateActiveAction(this._button); return this._button.toggleStatus; - }, + } + toggled() { return this._button.toggleStatus; - }, + } + onCreate() { this.toggle(false); - }, + } + disable() { this.toggle(false); // is needed to prevent active button disabled this._button.disabled = true; this._updateDisabled(); - }, + } + enable() { this._button.disabled = false; this._updateDisabled(); this._updateActiveAction(this._button); - }, + } + _triggerClick(e) { if (e) { // is needed to prevent scrolling when clicking on a-element with href="a" @@ -100,7 +116,8 @@ const PMButton = Control.extend({ this._button.onClick(e, { button: this, event: e }); this._clicked(e); this._button.afterClick(e, { button: this, event: e }); - }, + } + _makeButton(button) { const pos = this.options.position.indexOf('right') > -1 ? 'pos-right' : ''; @@ -251,7 +268,7 @@ const PMButton = Control.extend({ } return buttonContainer; - }, + } _applyStyleClasses() { if (!this._container) { @@ -265,7 +282,7 @@ const PMButton = Control.extend({ this.buttonsDomNode.classList.add('active'); this.buttonsDomNode.classList.add('activeChild'); } - }, + } _onBtnClick() { if (this._button.disabled) { @@ -283,13 +300,13 @@ const PMButton = Control.extend({ } } this._fireButtonClick(btnName, this._button); - }, + } _clicked() { if (this._button.doToggle) { this.toggle(); } - }, + } _updateDisabled() { if (!this._container) { @@ -306,7 +323,8 @@ const PMButton = Control.extend({ button.classList.remove(className); button.setAttribute('aria-disabled', 'false'); } - }, + } + _updateActiveAction(button) { button._preparedActions?.forEach((action) => { if (action?._node) { @@ -317,7 +335,5 @@ const PMButton = Control.extend({ } } }); - }, -}); - -export default PMButton; + } +} diff --git a/src/js/Toolbar/L.PM.Toolbar.js b/src/js/Toolbar/L.PM.Toolbar.js index 8cbf9045..f89edd80 100644 --- a/src/js/Toolbar/L.PM.Toolbar.js +++ b/src/js/Toolbar/L.PM.Toolbar.js @@ -5,35 +5,39 @@ import { getTranslation } from '../helpers'; Control.PMButton = PMButton; -const Toolbar = Class.extend({ - options: { - drawMarker: true, - drawRectangle: true, - drawPolyline: true, - drawPolygon: true, - drawCircle: true, - drawCircleMarker: true, - drawText: true, - editMode: true, - dragMode: true, - cutPolygon: true, - removalMode: true, - rotateMode: true, - snappingOption: true, - drawControls: true, - editControls: true, - optionsControls: true, - customControls: true, - oneBlock: false, - position: 'topleft', - positions: { - draw: '', - edit: '', - options: '', - custom: '', - }, - }, - customButtons: [], +export default class Toolbar extends Class { + static { + this.setDefaultOptions({ + drawMarker: true, + drawRectangle: true, + drawPolyline: true, + drawPolygon: true, + drawCircle: true, + drawCircleMarker: true, + drawText: true, + editMode: true, + dragMode: true, + cutPolygon: true, + removalMode: true, + rotateMode: true, + snappingOption: true, + drawControls: true, + editControls: true, + optionsControls: true, + customControls: true, + oneBlock: false, + position: 'topleft', + positions: { + draw: '', + edit: '', + options: '', + custom: '', + }, + }); + } + + customButtons = []; + initialize(map) { // For some reason there is an reference between multiple maps instances this.customButtons = []; @@ -45,7 +49,8 @@ const Toolbar = Class.extend({ }; this.init(map); - }, + } + reinit() { const addControls = this.isVisible; @@ -55,7 +60,8 @@ const Toolbar = Class.extend({ if (addControls) { this.addControls(); } - }, + } + init(map) { this.map = map; @@ -79,7 +85,8 @@ const Toolbar = Class.extend({ ); this._defineButtons(); - }, + } + _createContainer(name) { const container = `${name}Container`; if (!this[container]) { @@ -89,10 +96,11 @@ const Toolbar = Class.extend({ ); } return this[container]; - }, + } + getButtons() { return this.buttons; - }, + } addControls(options = this.options) { // adds all buttons to the map specified inside options @@ -113,7 +121,8 @@ const Toolbar = Class.extend({ this.isVisible = true; // now show the specified buttons this._showHideButtons(); - }, + } + applyIconStyle() { const buttons = this.getButtons(); @@ -140,7 +149,8 @@ const Toolbar = Class.extend({ className: iconClasses.geomanIcons[name], }); } - }, + } + removeControls() { // grab all buttons to loop through const buttons = this.getButtons(); @@ -151,27 +161,31 @@ const Toolbar = Class.extend({ } this.isVisible = false; - }, + } + deleteControl(name) { const btnName = this._btnNameMapping(name); if (this.buttons[btnName]) { this.buttons[btnName].remove(); delete this.buttons[btnName]; } - }, + } + toggleControls(options = this.options) { if (this.isVisible) { this.removeControls(); } else { this.addControls(options); } - }, + } + _addButton(name, button) { this.buttons[name] = button; this.options[name] = !!this.options[name] || false; return this.buttons[name]; - }, + } + triggerClickOnToggledButtons(exceptThisButton) { // this function is used when - e.g. drawing mode is enabled and a possible // other active mode (like removal tool) is already active. @@ -188,7 +202,8 @@ const Toolbar = Class.extend({ button._triggerClick(); } } - }, + } + toggleButton(name, status, disableOthers = true) { // does not fire the events/functionality of the button // this just changes the state and is used if a functionality (like Draw) @@ -215,7 +230,8 @@ const Toolbar = Class.extend({ } // now toggle the state of the button return this.buttons[toggleBtnName].toggle(status); - }, + } + _defineButtons() { // some buttons are still in their respective classes, like L.PM.Draw.Polygon const drawMarkerButton = { @@ -423,7 +439,7 @@ const Toolbar = Class.extend({ this._addButton('cutPolygon', new PMButton(cutButton)); this._addButton('removalMode', new PMButton(deleteButton)); this._addButton('rotateMode', new PMButton(rotateButton)); - }, + } _showHideButtons() { // if Toolbar is not visible, we don't need to update button positions @@ -479,20 +495,24 @@ const Toolbar = Class.extend({ buttons[btn].addTo(this.map); } } - }, + } + _getBtnPosition(block) { return this.options.positions && this.options.positions[block] ? this.options.positions[block] : this.options.position; - }, + } + setBlockPosition(block, position) { this.options.positions[block] = position; this._showHideButtons(); this.changeControlOrder(); - }, + } + getBlockPositions() { return this.options.positions; - }, + } + copyDrawControl(copyInstance, options) { if (!options) { throw new TypeError('Button has no name'); @@ -519,7 +539,8 @@ const Toolbar = Class.extend({ options = { ...btn, ...options }; const control = this.createCustomControl(options); return { drawInstance, control }; - }, + } + createCustomControl(options) { if (!options.name) { throw new TypeError('Button has no name'); @@ -575,13 +596,16 @@ const Toolbar = Class.extend({ const control = this._addButton(options.name, new PMButton(_options)); this.changeControlOrder(); return control; - }, + } + controlExists(name) { return Boolean(this.getButton(name)); - }, + } + getButton(name) { return this.getButtons()[name]; - }, + } + getButtonsInBlock(name) { const buttonsInBlock = {}; if (name) { @@ -597,7 +621,8 @@ const Toolbar = Class.extend({ } } return buttonsInBlock; - }, + } + changeControlOrder(order = []) { const shapeMapping = this._shapeMapping(); @@ -662,7 +687,8 @@ const Toolbar = Class.extend({ this.map.pm.Toolbar.buttons = newbtnorder; this._showHideButtons(); - }, + } + getControlOrder() { const buttons = this.getButtons(); const order = []; @@ -670,7 +696,8 @@ const Toolbar = Class.extend({ order.push(btn); } return order; - }, + } + changeActionsOfControl(name, actions) { const btnName = this._btnNameMapping(name); @@ -686,7 +713,8 @@ const Toolbar = Class.extend({ } this.buttons[btnName]._button.actions = actions; this.changeControlOrder(); - }, + } + setButtonDisabled(name, state) { const btnName = this._btnNameMapping(name); if (state) { @@ -694,7 +722,8 @@ const Toolbar = Class.extend({ } else { this.buttons[btnName].enable(); } - }, + } + _shapeMapping() { return { Marker: 'drawMarker', @@ -711,11 +740,10 @@ const Toolbar = Class.extend({ Rotate: 'rotateMode', Text: 'drawText', }; - }, + } + _btnNameMapping(name) { const shapeMapping = this._shapeMapping(); return shapeMapping[name] ? shapeMapping[name] : name; - }, -}); - -export default Toolbar; + } +} From 6d390a0ddd843dd17569b4991e1d2919f0d847d6 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sat, 1 Nov 2025 21:30:12 +0100 Subject: [PATCH 13/41] Change export of classes --- src/js/Draw/L.PM.Draw.Circle.js | 8 +--- src/js/Draw/L.PM.Draw.CircleMarker.js | 6 +-- src/js/Draw/L.PM.Draw.Cut.js | 7 +--- src/js/Draw/L.PM.Draw.Line.js | 6 +-- src/js/Draw/L.PM.Draw.Marker.js | 6 +-- src/js/Draw/L.PM.Draw.Polygon.js | 7 +--- src/js/Draw/L.PM.Draw.Rectangle.js | 6 +-- src/js/Draw/L.PM.Draw.Text.js | 6 +-- src/js/Edit/L.PM.Edit.Circle.js | 10 ++--- src/js/Edit/L.PM.Edit.CircleMarker.js | 6 +-- src/js/Edit/L.PM.Edit.ImageOverlay.js | 6 +-- src/js/Edit/L.PM.Edit.LayerGroup.js | 7 +--- src/js/Edit/L.PM.Edit.Line.js | 6 +-- src/js/Edit/L.PM.Edit.Marker.js | 6 +-- src/js/Edit/L.PM.Edit.Polygon.js | 8 +--- src/js/Edit/L.PM.Edit.Rectangle.js | 8 +--- src/js/Edit/L.PM.Edit.Text.js | 6 +-- src/js/L.PM.js | 53 ++++++++++++++++++--------- 18 files changed, 60 insertions(+), 108 deletions(-) diff --git a/src/js/Draw/L.PM.Draw.Circle.js b/src/js/Draw/L.PM.Draw.Circle.js index 5f307825..129aea56 100644 --- a/src/js/Draw/L.PM.Draw.Circle.js +++ b/src/js/Draw/L.PM.Draw.Circle.js @@ -1,7 +1,7 @@ import { Circle } from 'leaflet'; -import Draw from './L.PM.Draw'; +import GeomanDrawCircleMarker from './L.PM.Draw.CircleMarker'; -class GeomanDrawCircle extends Draw.CircleMarker { +export default class GeomanDrawCircle extends GeomanDrawCircleMarker { initialize(map) { this._map = map; this._shape = 'Circle'; @@ -33,7 +33,3 @@ class GeomanDrawCircle extends Draw.CircleMarker { return this._map.distance(A, B); } } - -Draw.Circle = GeomanDrawCircle; - -export default GeomanDrawCircle; diff --git a/src/js/Draw/L.PM.Draw.CircleMarker.js b/src/js/Draw/L.PM.Draw.CircleMarker.js index d10d8c7c..ce5c366d 100644 --- a/src/js/Draw/L.PM.Draw.CircleMarker.js +++ b/src/js/Draw/L.PM.Draw.CircleMarker.js @@ -12,7 +12,7 @@ import { destinationOnLine, getTranslation } from '../helpers'; import Draw from './L.PM.Draw'; import Utils from '../L.PM.Utils'; -class GeomanDrawCircleMarker extends Draw { +export default class GeomanDrawCircleMarker extends Draw { initialize(map) { this._map = map; this._shape = 'CircleMarker'; @@ -536,7 +536,3 @@ class GeomanDrawCircleMarker extends Draw { return this._map.project(A).distanceTo(this._map.project(B)); } } - -Draw.CircleMarker = GeomanDrawCircleMarker; - -export default GeomanDrawCircleMarker; diff --git a/src/js/Draw/L.PM.Draw.Cut.js b/src/js/Draw/L.PM.Draw.Cut.js index fe6076c0..656f59f3 100644 --- a/src/js/Draw/L.PM.Draw.Cut.js +++ b/src/js/Draw/L.PM.Draw.Cut.js @@ -12,8 +12,9 @@ import { import Draw from './L.PM.Draw'; import Geoman from '../L.PM'; import Utils from '../L.PM.Utils'; +import GeomanDrawPolygon from './L.PM.Draw.Polygon'; -class GeomanCut extends Draw.Polygon { +export default class GeomanCut extends GeomanDrawPolygon { initialize(map) { this._map = map; this._shape = 'Cut'; @@ -275,7 +276,3 @@ class GeomanCut extends Draw.Polygon { _change = Util.falseFn; } - -Draw.Cut = GeomanCut; - -export default GeomanCut; diff --git a/src/js/Draw/L.PM.Draw.Line.js b/src/js/Draw/L.PM.Draw.Line.js index d887a042..1b5bf245 100644 --- a/src/js/Draw/L.PM.Draw.Line.js +++ b/src/js/Draw/L.PM.Draw.Line.js @@ -5,7 +5,7 @@ import { DivIcon, FeatureGroup, Marker, Point, Polyline, Util } from 'leaflet'; import { getTranslation } from '../helpers'; import Utils from '../L.PM.Utils'; -class GeomanDrawLine extends Draw { +export default class GeomanDrawPolyline extends Draw { initialize(map) { this._map = map; this._shape = 'Line'; @@ -439,7 +439,3 @@ class GeomanDrawLine extends Draw { this._hintline?.setStyle(this.options.hintlineStyle); } } - -Draw.Line = GeomanDrawLine; - -export default GeomanDrawLine; diff --git a/src/js/Draw/L.PM.Draw.Marker.js b/src/js/Draw/L.PM.Draw.Marker.js index cf158845..814d8498 100644 --- a/src/js/Draw/L.PM.Draw.Marker.js +++ b/src/js/Draw/L.PM.Draw.Marker.js @@ -2,7 +2,7 @@ import { Marker, Point, Util } from 'leaflet'; import { getTranslation } from '../helpers'; import Draw from './L.PM.Draw'; -class GeomanDrawMarker extends Draw { +export default class GeomanDrawMarker extends Draw { initialize(map) { this._map = map; this._shape = 'Marker'; @@ -204,7 +204,3 @@ class GeomanDrawMarker extends Draw { } } } - -Draw.Marker = GeomanDrawMarker; - -export default GeomanDrawMarker; diff --git a/src/js/Draw/L.PM.Draw.Polygon.js b/src/js/Draw/L.PM.Draw.Polygon.js index 9d799341..38e86043 100644 --- a/src/js/Draw/L.PM.Draw.Polygon.js +++ b/src/js/Draw/L.PM.Draw.Polygon.js @@ -1,8 +1,9 @@ import { DivIcon, Marker, Polygon } from 'leaflet'; import { getTranslation } from '../helpers'; import Draw from './L.PM.Draw'; +import GeomanDrawLine from './L.PM.Draw.Line'; -class GeomanDrawPolygon extends Draw.Line { +export default class GeomanDrawPolygon extends GeomanDrawLine { initialize(map) { this._map = map; this._shape = 'Polygon'; @@ -116,7 +117,3 @@ class GeomanDrawPolygon extends Draw.Line { } } } - -Draw.Polygon = GeomanDrawPolygon; - -export default GeomanDrawPolygon; diff --git a/src/js/Draw/L.PM.Draw.Rectangle.js b/src/js/Draw/L.PM.Draw.Rectangle.js index 27caf505..45a2353a 100644 --- a/src/js/Draw/L.PM.Draw.Rectangle.js +++ b/src/js/Draw/L.PM.Draw.Rectangle.js @@ -3,7 +3,7 @@ import { fixLatOffset, getTranslation } from '../helpers'; import Draw from './L.PM.Draw'; import Utils from '../L.PM.Utils'; -class GeomanDrawRectangle extends Draw { +export default class GeomanDrawRectangle extends Draw { initialize(map) { this._map = map; this._shape = 'Rectangle'; @@ -330,7 +330,3 @@ class GeomanDrawRectangle extends Draw { this._layer?.setStyle(this.options.pathOptions); } } - -Draw.Rectangle = GeomanDrawRectangle; - -export default GeomanDrawRectangle; diff --git a/src/js/Draw/L.PM.Draw.Text.js b/src/js/Draw/L.PM.Draw.Text.js index 03422cc4..14cad301 100644 --- a/src/js/Draw/L.PM.Draw.Text.js +++ b/src/js/Draw/L.PM.Draw.Text.js @@ -2,7 +2,7 @@ import { DivIcon, Marker, Point, Util } from 'leaflet'; import { getTranslation } from '../helpers'; import Draw from './L.PM.Draw'; -class GeomanDrawText extends Draw { +export default class GeomanDrawText extends Draw { initialize(map) { this._map = map; this._shape = 'Text'; @@ -214,7 +214,3 @@ class GeomanDrawText extends Draw { }); } } - -Draw.Text = GeomanDrawText; - -export default GeomanDrawText; diff --git a/src/js/Edit/L.PM.Edit.Circle.js b/src/js/Edit/L.PM.Edit.Circle.js index 9978ad4b..d3ef1b3d 100644 --- a/src/js/Edit/L.PM.Edit.Circle.js +++ b/src/js/Edit/L.PM.Edit.Circle.js @@ -1,7 +1,7 @@ -import Edit from './L.PM.Edit'; import Utils from '../L.PM.Utils'; +import GeomanEditCircleMarker from './L.PM.Edit.CircleMarker'; -class GeomanEditCircle extends Edit.CircleMarker { +export default class GeomanEditCircle extends GeomanEditCircleMarker { _shape = 'Circle'; initialize(layer) { @@ -17,7 +17,7 @@ class GeomanEditCircle extends Edit.CircleMarker { enable(options) { // TODO: this can be removed after the default options of CircleMarker.enable are removed - Edit.CircleMarker.prototype.enable.call(this, options || {}); + GeomanEditCircleMarker.prototype.enable.call(this, options || {}); } _extendingEnable() {} @@ -82,7 +82,3 @@ class GeomanEditCircle extends Edit.CircleMarker { this._fireVertexClick(e, undefined); } } - -Edit.Circle = GeomanEditCircle; - -export default GeomanEditCircle; diff --git a/src/js/Edit/L.PM.Edit.CircleMarker.js b/src/js/Edit/L.PM.Edit.CircleMarker.js index adc8ebc5..adcc5ef8 100644 --- a/src/js/Edit/L.PM.Edit.CircleMarker.js +++ b/src/js/Edit/L.PM.Edit.CircleMarker.js @@ -11,7 +11,7 @@ import { destinationOnLine } from '../helpers'; import Edit from './L.PM.Edit'; import Utils from '../L.PM.Utils'; -class GeomanEditCircleMarker extends Edit { +export default class GeomanEditCircleMarker extends Edit { _shape = 'CircleMarker'; initialize(layer) { @@ -510,7 +510,3 @@ class GeomanEditCircleMarker extends Edit { this._fireVertexClick(e, undefined); } } - -Edit.CircleMarker = GeomanEditCircleMarker; - -export default GeomanEditCircleMarker; diff --git a/src/js/Edit/L.PM.Edit.ImageOverlay.js b/src/js/Edit/L.PM.Edit.ImageOverlay.js index ea4f81ff..3c6214e7 100644 --- a/src/js/Edit/L.PM.Edit.ImageOverlay.js +++ b/src/js/Edit/L.PM.Edit.ImageOverlay.js @@ -1,7 +1,7 @@ import { Util } from 'leaflet'; import Edit from './L.PM.Edit'; -class GeomanEditImageOverlay extends Edit { +export default class GeomanEditImageOverlay extends Edit { _shape = 'ImageOverlay'; initialize(layer) { @@ -95,7 +95,3 @@ class GeomanEditImageOverlay extends Edit { return [northwest, northeast, southeast, southwest]; } } - -Edit.ImageOverlay = GeomanEditImageOverlay; - -export default GeomanEditImageOverlay; diff --git a/src/js/Edit/L.PM.Edit.LayerGroup.js b/src/js/Edit/L.PM.Edit.LayerGroup.js index b91240bd..3e455050 100644 --- a/src/js/Edit/L.PM.Edit.LayerGroup.js +++ b/src/js/Edit/L.PM.Edit.LayerGroup.js @@ -1,11 +1,10 @@ import { Class, LayerGroup, Util } from 'leaflet'; -import Edit from './L.PM.Edit'; import Geoman from '../L.PM'; // LayerGroup doesn't inherit from L.PM.Edit because it's just calling L.PM.Edit.Polygon // (which inherits from L.PM.Edit) for each layer, // so it's not really a parent class -class GeomanEditLayerGroup extends Class { +export default class GeomanEditLayerGroup extends Class { initialize(layerGroup) { this._layerGroup = layerGroup; this._layers = this.getLayers(); @@ -236,7 +235,3 @@ class GeomanEditLayerGroup extends Class { }); } } - -Edit.LayerGroup = GeomanEditLayerGroup; - -export default GeomanEditLayerGroup; diff --git a/src/js/Edit/L.PM.Edit.Line.js b/src/js/Edit/L.PM.Edit.Line.js index 2f4c325a..97fb86e3 100644 --- a/src/js/Edit/L.PM.Edit.Line.js +++ b/src/js/Edit/L.PM.Edit.Line.js @@ -23,7 +23,7 @@ import Utils from '../L.PM.Utils'; // So I can get 'b' with: arr[0][0][1]. // Got it? Now you know what is meant when you read "indexPath" around here. Have fun 👍 -class GeomanEditLine extends Edit { +export default class GeomanEditPolyline extends Edit { static { this.include(MarkerLimits); } @@ -874,7 +874,3 @@ class GeomanEditLine extends Edit { this._fireVertexClick(e, indexPath); } } - -Edit.Line = GeomanEditLine; - -export default GeomanEditLine; diff --git a/src/js/Edit/L.PM.Edit.Marker.js b/src/js/Edit/L.PM.Edit.Marker.js index 1f88bb8c..9aa1832c 100644 --- a/src/js/Edit/L.PM.Edit.Marker.js +++ b/src/js/Edit/L.PM.Edit.Marker.js @@ -1,7 +1,7 @@ import { Util } from 'leaflet'; import Edit from './L.PM.Edit'; -class GeomanEditMarker extends Edit { +export default class GeomanEditMarker extends Edit { _shape = 'Marker'; initialize(layer) { @@ -139,7 +139,3 @@ class GeomanEditMarker extends Edit { marker.off('pm:dragstart', this._unsnap, this); } } - -Edit.Marker = GeomanEditMarker; - -export default GeomanEditMarker; diff --git a/src/js/Edit/L.PM.Edit.Polygon.js b/src/js/Edit/L.PM.Edit.Polygon.js index 36a08ffd..a2b5e557 100644 --- a/src/js/Edit/L.PM.Edit.Polygon.js +++ b/src/js/Edit/L.PM.Edit.Polygon.js @@ -1,8 +1,8 @@ import lineIntersect from '@turf/line-intersect'; import { Polyline } from 'leaflet'; -import Edit from './L.PM.Edit'; +import GeomanEditPolyline from './L.PM.Edit.Line'; -class GeomanEditPolygon extends Edit.Line { +export default class GeomanEditPolygon extends GeomanEditPolyline { _shape = 'Polygon'; _checkMarkerAllowedToDrag(marker) { const { prevMarker, nextMarker } = this._getNeighborMarkers(marker); @@ -26,7 +26,3 @@ class GeomanEditPolygon extends Edit.Line { return true; } } - -Edit.Polygon = GeomanEditPolygon; - -export default GeomanEditPolygon; diff --git a/src/js/Edit/L.PM.Edit.Rectangle.js b/src/js/Edit/L.PM.Edit.Rectangle.js index 8cfd7405..aef6928c 100644 --- a/src/js/Edit/L.PM.Edit.Rectangle.js +++ b/src/js/Edit/L.PM.Edit.Rectangle.js @@ -2,10 +2,10 @@ // https://github.com/Leaflet/Leaflet.draw/blob/master/src/edit/handler/Edit.Rectangle.js import { DivIcon, FeatureGroup, Marker } from 'leaflet'; import { calcAngle } from '../helpers'; -import Edit from './L.PM.Edit'; import Utils from '../L.PM.Utils'; +import GeomanEditPolygon from './L.PM.Edit.Polygon'; -class GeomanEditRectangle extends Edit.Polygon { +export default class GeomanEditRectangle extends GeomanEditPolygon { _shape = 'Rectangle'; // initializes Rectangle Markers _initMarkers() { @@ -255,7 +255,3 @@ class GeomanEditRectangle extends Edit.Polygon { ); } } - -Edit.Rectangle = GeomanEditRectangle; - -export default GeomanEditRectangle; diff --git a/src/js/Edit/L.PM.Edit.Text.js b/src/js/Edit/L.PM.Edit.Text.js index 690a5b08..e119288c 100644 --- a/src/js/Edit/L.PM.Edit.Text.js +++ b/src/js/Edit/L.PM.Edit.Text.js @@ -2,7 +2,7 @@ import { DomEvent, Util } from 'leaflet'; import Edit from './L.PM.Edit'; import Draw from '../Draw/L.PM.Draw'; -class GeomanEditCircleText extends Edit { +export default class GeomanEditCircleText extends Edit { _shape = 'Text'; initialize(layer) { @@ -294,7 +294,3 @@ class GeomanEditCircleText extends Edit { e.preventDefault(); } } - -Edit.Text = GeomanEditCircleText; - -export default GeomanEditCircleText; diff --git a/src/js/L.PM.js b/src/js/L.PM.js index 4c9fb269..a4f04f05 100644 --- a/src/js/L.PM.js +++ b/src/js/L.PM.js @@ -31,25 +31,44 @@ import GeomanMap from './L.PM.Map'; import Toolbar from './Toolbar/L.PM.Toolbar'; import Draw from './Draw/L.PM.Draw'; -import './Draw/L.PM.Draw.CircleMarker'; -import './Draw/L.PM.Draw.Circle'; -import './Draw/L.PM.Draw.Line'; -import './Draw/L.PM.Draw.Marker'; -import './Draw/L.PM.Draw.Polygon'; -import './Draw/L.PM.Draw.Rectangle'; -import './Draw/L.PM.Draw.Cut'; -import './Draw/L.PM.Draw.Text'; +import GeomanDrawCircleMarker from './Draw/L.PM.Draw.CircleMarker'; +import GeomanDrawCircle from './Draw/L.PM.Draw.Circle'; +import GeomanDrawPolyline from './Draw/L.PM.Draw.Line'; +import GeomanDrawMarker from './Draw/L.PM.Draw.Marker'; +import GeomanDrawPolygon from './Draw/L.PM.Draw.Polygon'; +import GeomanDrawRectangle from './Draw/L.PM.Draw.Rectangle'; +import GeomanCut from './Draw/L.PM.Draw.Cut'; +import GeomanDrawText from './Draw/L.PM.Draw.Text'; + +Draw.CircleMarker = GeomanDrawCircleMarker; +Draw.Circle = GeomanDrawCircle; +Draw.Line = GeomanDrawPolyline; +Draw.Marker = GeomanDrawMarker; +Draw.Polygon = GeomanDrawPolygon; +Draw.Rectangle = GeomanDrawRectangle; +Draw.Cut = GeomanCut; +Draw.Text = GeomanDrawText; import Edit from './Edit/L.PM.Edit'; -import './Edit/L.PM.Edit.CircleMarker'; -import './Edit/L.PM.Edit.Circle'; -import './Edit/L.PM.Edit.ImageOverlay'; -import './Edit/L.PM.Edit.LayerGroup'; -import './Edit/L.PM.Edit.Line'; -import './Edit/L.PM.Edit.Marker'; -import './Edit/L.PM.Edit.Polygon'; -import './Edit/L.PM.Edit.Rectangle'; -import './Edit/L.PM.Edit.Text'; +import GeomanEditCircleMarker from './Edit/L.PM.Edit.CircleMarker'; +import GeomanEditCircle from './Edit/L.PM.Edit.Circle'; +import GeomanEditImageOverlay from './Edit/L.PM.Edit.ImageOverlay'; +import GeomanEditLayerGroup from './Edit/L.PM.Edit.LayerGroup'; +import GeomanEditPolyline from './Edit/L.PM.Edit.Line'; +import GeomanEditMarker from './Edit/L.PM.Edit.Marker'; +import GeomanEditPolygon from './Edit/L.PM.Edit.Polygon'; +import GeomanEditRectangle from './Edit/L.PM.Edit.Rectangle'; +import GeomanEditText from './Edit/L.PM.Edit.Text'; + +Edit.CircleMarker = GeomanEditCircleMarker; +Edit.Circle = GeomanEditCircle; +Edit.ImageOverlay = GeomanEditImageOverlay; +Edit.LayerGroup = GeomanEditLayerGroup; +Edit.Line = GeomanEditPolyline; +Edit.Marker = GeomanEditMarker; +Edit.Polygon = GeomanEditPolygon; +Edit.Rectangle = GeomanEditRectangle; +Edit.Text = GeomanEditText; import '../css/controls.css'; import '../css/layers.css'; From 3cc174ab52bbb1180598adfc0d01038e64056e11 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sat, 1 Nov 2025 22:29:24 +0100 Subject: [PATCH 14/41] add cypress/unsafe-to-chain-command to eslint --- eslint.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/eslint.config.js b/eslint.config.js index 43aea8b9..4deb0765 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -25,6 +25,7 @@ module.exports = [ 'no-restricted-syntax': 0, 'guard-for-in': 0, ...eslintPluginCypress.configs.recommended.rules, + 'cypress/unsafe-to-chain-command': 0, }, }, eslintConfigPrettier, From b247893c628bb798b3108587209f0a32d011aca5 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sat, 1 Nov 2025 22:29:51 +0100 Subject: [PATCH 15/41] Replace mouse events with pointer events --- cypress/e2e/imageoverlay.cy.js | 2 +- cypress/e2e/rectangle.cy.js | 80 +++++++++---------- leaflet-geoman.d.ts | 18 ++--- src/js/Draw/L.PM.Draw.Rectangle.js | 2 +- src/js/L.PM.Map.js | 92 ---------------------- src/js/L.PM.js | 2 +- src/js/Mixins/Dragging.js | 118 +++-------------------------- 7 files changed, 64 insertions(+), 250 deletions(-) diff --git a/cypress/e2e/imageoverlay.cy.js b/cypress/e2e/imageoverlay.cy.js index 9e9db3a3..1bfe3511 100644 --- a/cypress/e2e/imageoverlay.cy.js +++ b/cypress/e2e/imageoverlay.cy.js @@ -52,7 +52,7 @@ describe('Opens Testing Environment', () => { { interactive: true } ).addTo(map); - io.pm._simulateMouseDownEvent = () => { + io.pm._dragMixinOnPointerDown = () => { eventcalled = true; }; }); diff --git a/cypress/e2e/rectangle.cy.js b/cypress/e2e/rectangle.cy.js index ea858657..2b6a5015 100644 --- a/cypress/e2e/rectangle.cy.js +++ b/cypress/e2e/rectangle.cy.js @@ -256,7 +256,7 @@ describe('Draw Rectangle', () => { // test 1: snapIgnore: undefined, pmIgnore: undefined, optIn: false --> snappable cy.toolbarButton('rectangle').click(); - // click or mousemove is needed to init snapList + // click or pointermove is needed to init snapList cy.get(mapSelector).click(200, 100); let layer; @@ -271,7 +271,7 @@ describe('Draw Rectangle', () => { layer.options.snapIgnore = true; }); cy.toolbarButton('rectangle').click(); - // click or mousemove is needed to init snapList + // click or pointermove is needed to init snapList cy.get(mapSelector).click(200, 100); cy.window().then(({ map }) => { @@ -285,7 +285,7 @@ describe('Draw Rectangle', () => { layer.options.pmIgnore = true; }); cy.toolbarButton('rectangle').click(); - // click or mousemove is needed to init snapList + // click or pointermove is needed to init snapList cy.get(mapSelector).click(200, 100); cy.window().then(({ map }) => { @@ -299,7 +299,7 @@ describe('Draw Rectangle', () => { layer.options.pmIgnore = true; }); cy.toolbarButton('rectangle').click(); - // click or mousemove is needed to init snapList + // click or pointermove is needed to init snapList cy.get(mapSelector).click(200, 100); cy.window().then(({ map }) => { @@ -314,7 +314,7 @@ describe('Draw Rectangle', () => { Geoman.setOptIn(true); }); cy.toolbarButton('rectangle').click(); - // click or mousemove is needed to init snapList + // click or pointermove is needed to init snapList cy.get(mapSelector).click(200, 100); cy.window().then(({ map }) => { @@ -328,7 +328,7 @@ describe('Draw Rectangle', () => { Geoman.setOptIn(true); }); cy.toolbarButton('rectangle').click(); - // click or mousemove is needed to init snapList + // click or pointermove is needed to init snapList cy.get(mapSelector).click(200, 100); cy.window().then(({ map }) => { @@ -341,7 +341,7 @@ describe('Draw Rectangle', () => { layer.options.snapIgnore = false; }); cy.toolbarButton('rectangle').click(); - // click or mousemove is needed to init snapList + // click or pointermove is needed to init snapList cy.get(mapSelector).click(200, 100); cy.window().then(({ map }) => { @@ -432,17 +432,17 @@ describe('Draw Rectangle', () => { const center2 = layers[1].getCenter(); const layer = layers[0]; - layer.pm._dragMixinOnMouseDown({ + layer.pm._dragMixinOnPointerDown({ originalEvent: { button: 0 }, target: layer, latlng: map.containerPointToLatLng([290, 290]), }); - layer.pm._dragMixinOnMouseMove({ + layer.pm._dragMixinOnPointerMove({ originalEvent: { button: 0 }, target: layer, latlng: map.containerPointToLatLng([500, 320]), }); - layer.pm._dragMixinOnMouseUp({ + layer.pm._dragMixinOnPointerUp({ originalEvent: { button: 0 }, target: layer, latlng: map.containerPointToLatLng([320, 320]), @@ -472,17 +472,17 @@ describe('Draw Rectangle', () => { layer.pm.options.syncLayersOnDrag = layers; // Drag both layers - layer.pm._dragMixinOnMouseDown({ + layer.pm._dragMixinOnPointerDown({ originalEvent: { button: 0 }, target: layer, latlng: map.containerPointToLatLng([290, 290]), }); - layer.pm._dragMixinOnMouseMove({ + layer.pm._dragMixinOnPointerMove({ originalEvent: { button: 0 }, target: layer, latlng: map.containerPointToLatLng([500, 320]), }); - layer.pm._dragMixinOnMouseUp({ + layer.pm._dragMixinOnPointerUp({ originalEvent: { button: 0 }, target: layer, latlng: map.containerPointToLatLng([320, 320]), @@ -496,17 +496,17 @@ describe('Draw Rectangle', () => { const layer2 = layers[1]; // Drag only layer2 - layer2.pm._dragMixinOnMouseDown({ + layer2.pm._dragMixinOnPointerDown({ originalEvent: { button: 0 }, target: layer2, latlng: map.containerPointToLatLng([290, 290]), }); - layer2.pm._dragMixinOnMouseMove({ + layer2.pm._dragMixinOnPointerMove({ originalEvent: { button: 0 }, target: layer2, latlng: map.containerPointToLatLng([500, 320]), }); - layer2.pm._dragMixinOnMouseUp({ + layer2.pm._dragMixinOnPointerUp({ originalEvent: { button: 0 }, target: layer2, latlng: map.containerPointToLatLng([320, 320]), @@ -650,17 +650,17 @@ describe('Draw Rectangle', () => { layer.pm.options.syncLayersOnDrag = layers; // Drag both layers - layer.pm._dragMixinOnMouseDown({ + layer.pm._dragMixinOnPointerDown({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([290, 290]), }); - layer.pm._dragMixinOnMouseMove({ + layer.pm._dragMixinOnPointerMove({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([500, 320]), }); - layer.pm._dragMixinOnMouseUp({ + layer.pm._dragMixinOnPointerUp({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([320, 320]), @@ -674,17 +674,17 @@ describe('Draw Rectangle', () => { const layer2 = layers[1]; // Drag only layer2 - layer2.pm._dragMixinOnMouseDown({ + layer2.pm._dragMixinOnPointerDown({ originalEvent: { button: 0 }, target: layer2, latlng: mapCanvas.containerPointToLatLng([290, 290]), }); - layer2.pm._dragMixinOnMouseMove({ + layer2.pm._dragMixinOnPointerMove({ originalEvent: { button: 0 }, target: layer2, latlng: mapCanvas.containerPointToLatLng([500, 320]), }); - layer2.pm._dragMixinOnMouseUp({ + layer2.pm._dragMixinOnPointerUp({ originalEvent: { button: 0 }, target: layer2, latlng: mapCanvas.containerPointToLatLng([320, 320]), @@ -731,17 +731,17 @@ describe('Draw Rectangle', () => { const layer = layers[0]; // Drag both layers - layer.pm._dragMixinOnMouseDown({ + layer.pm._dragMixinOnPointerDown({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([290, 290]), }); - layer.pm._dragMixinOnMouseMove({ + layer.pm._dragMixinOnPointerMove({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([500, 320]), }); - layer.pm._dragMixinOnMouseUp({ + layer.pm._dragMixinOnPointerUp({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([320, 320]), @@ -787,17 +787,17 @@ describe('Draw Rectangle', () => { const layer = layers[0]; // Drag both layers - layer.pm._dragMixinOnMouseDown({ + layer.pm._dragMixinOnPointerDown({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([290, 290]), }); - layer.pm._dragMixinOnMouseMove({ + layer.pm._dragMixinOnPointerMove({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([500, 320]), }); - layer.pm._dragMixinOnMouseUp({ + layer.pm._dragMixinOnPointerUp({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([320, 320]), @@ -834,9 +834,9 @@ describe('Draw Rectangle', () => { mapCanvas.on('pm:create', (e) => { rect1 = e.layer; - rect2 = new L.Rectangle(rect1.getBounds(), { renderer: new L.SVG() }).addTo( - mapCanvas - ); + rect2 = new L.Rectangle(rect1.getBounds(), { + renderer: new L.SVG(), + }).addTo(mapCanvas); }); }); @@ -852,17 +852,17 @@ describe('Draw Rectangle', () => { const layer = rect1; // Drag both layers - layer.pm._dragMixinOnMouseDown({ + layer.pm._dragMixinOnPointerDown({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([290, 290]), }); - layer.pm._dragMixinOnMouseMove({ + layer.pm._dragMixinOnPointerMove({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([500, 320]), }); - layer.pm._dragMixinOnMouseUp({ + layer.pm._dragMixinOnPointerUp({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([320, 320]), @@ -879,17 +879,17 @@ describe('Draw Rectangle', () => { const layer = rect2; // Drag both layers - layer.pm._dragMixinOnMouseDown({ + layer.pm._dragMixinOnPointerDown({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([290, 290]), }); - layer.pm._dragMixinOnMouseMove({ + layer.pm._dragMixinOnPointerMove({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([500, 320]), }); - layer.pm._dragMixinOnMouseUp({ + layer.pm._dragMixinOnPointerUp({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([320, 320]), @@ -1069,9 +1069,9 @@ describe('Draw Rectangle', () => { cy.toolbarButton('edit').click(); cy.get(mapSelector) - .trigger('pointerdown', 150, 60, {eventConstructor: 'PointerEvent'}) - .trigger('pointermove', 150, 55, {eventConstructor: 'PointerEvent'}) - .trigger('pointerup', 150, 55, {eventConstructor: 'PointerEvent'}); + .trigger('pointerdown', 150, 60, { eventConstructor: 'PointerEvent' }) + .trigger('pointermove', 150, 55, { eventConstructor: 'PointerEvent' }) + .trigger('pointerup', 150, 55, { eventConstructor: 'PointerEvent' }); cy.window().then(({ map }) => { const layer = map.pm.getGeomanDrawLayers()[1]; diff --git a/leaflet-geoman.d.ts b/leaflet-geoman.d.ts index a5714b23..0ab086d5 100644 --- a/leaflet-geoman.d.ts +++ b/leaflet-geoman.d.ts @@ -1740,9 +1740,9 @@ declare module 'leaflet' { addVertexOn?: | 'click' | 'dblclick' - | 'mousedown' - | 'mouseover' - | 'mouseout' + | 'pointerdown' + | 'pointerover' + | 'pointerout' | 'contextmenu'; /** A function for validation if a vertex (of a Line / Polygon) is allowed to add. It passes a object with `[layer, marker, event}`. For example to check if the layer has a certain property or if the `Ctrl` key is pressed. (default:undefined). */ @@ -1752,9 +1752,9 @@ declare module 'leaflet' { removeVertexOn?: | 'click' | 'dblclick' - | 'mousedown' - | 'mouseover' - | 'mouseout' + | 'pointerdown' + | 'pointerover' + | 'pointerout' | 'contextmenu'; /** A function for validation if a vertex (of a Line / Polygon) is allowed to remove. It passes a object with `[layer, marker, event}`. For example to check if the layer has a certain property or if the `Ctrl` key is pressed. */ @@ -1874,9 +1874,9 @@ declare module 'leaflet' { | null | 'click' | 'dblclick' - | 'mousedown' - | 'mouseover' - | 'mouseout' + | 'pointerdown' + | 'pointerover' + | 'pointerout' | 'contextmenu' | 'snap'; diff --git a/src/js/Draw/L.PM.Draw.Rectangle.js b/src/js/Draw/L.PM.Draw.Rectangle.js index 45a2353a..7f871d19 100644 --- a/src/js/Draw/L.PM.Draw.Rectangle.js +++ b/src/js/Draw/L.PM.Draw.Rectangle.js @@ -224,7 +224,7 @@ export default class GeomanDrawRectangle extends Draw { const A = fixLatOffset(this._startMarker.getLatLng(), this._map); const B = fixLatOffset(this._hintMarker.getLatLng(), this._map); - // Create a (maybe rotated) box using corners A & B (A = Starting Position, B = Current Mouse Position) + // Create a (maybe rotated) box using corners A & B (A = Starting Position, B = Current Pointer Position) const corners = Utils._getRotatedRectangle( A, B, diff --git a/src/js/L.PM.Map.js b/src/js/L.PM.Map.js index e418a8db..cd4fa936 100644 --- a/src/js/L.PM.Map.js +++ b/src/js/L.PM.Map.js @@ -268,96 +268,4 @@ export default class GeomanMap extends Class { _isCRSSimple() { return this.map.options.crs === CRS.Simple; } - - // in Canvas mode we need to convert touch- and pointerevents (IE) to mouseevents, because Leaflet don't support them. - _touchEventCounter = 0; - - _addTouchEvents(elm) { - if (this._touchEventCounter === 0) { - DomEvent.on(elm, 'touchmove', this._canvasTouchMove, this); - DomEvent.on( - elm, - 'touchstart touchend touchcancel', - this._canvasTouchClick, - this - ); - } - this._touchEventCounter += 1; - } - - _removeTouchEvents(elm) { - if (this._touchEventCounter === 1) { - DomEvent.off(elm, 'touchmove', this._canvasTouchMove, this); - DomEvent.off( - elm, - 'touchstart touchend touchcancel', - this._canvasTouchClick, - this - ); - } - this._touchEventCounter = - this._touchEventCounter <= 1 ? 0 : this._touchEventCounter - 1; - } - - _canvasTouchMove(e) { - getRenderer(this.map)._onMouseMove(this._createMouseEvent('mousemove', e)); - } - - _canvasTouchClick(e) { - let type = ''; - if (e.type === 'touchstart' || e.type === 'pointerdown') { - type = 'mousedown'; - } else if (e.type === 'touchend' || e.type === 'pointerup') { - type = 'mouseup'; - } else if (e.type === 'touchcancel' || e.type === 'pointercancel') { - type = 'mouseup'; - } - if (!type) { - return; - } - getRenderer(this.map)._onClick(this._createMouseEvent(type, e)); - } - - static _createMouseEvent(type, e) { - let mouseEvent; - const touchEvt = e.touches[0] || e.changedTouches[0]; - try { - mouseEvent = new MouseEvent(type, { - bubbles: e.bubbles, - cancelable: e.cancelable, - view: e.view, - detail: touchEvt.detail, - screenX: touchEvt.screenX, - screenY: touchEvt.screenY, - clientX: touchEvt.clientX, - clientY: touchEvt.clientY, - ctrlKey: e.ctrlKey, - altKey: e.altKey, - shiftKey: e.shiftKey, - metaKey: e.metaKey, - button: e.button, - relatedTarget: e.relatedTarget, - }); - } catch (ex) { - mouseEvent = document.createEvent('MouseEvents'); - mouseEvent.initMouseEvent( - type, - e.bubbles, - e.cancelable, - e.view, - touchEvt.detail, - touchEvt.screenX, - touchEvt.screenY, - touchEvt.clientX, - touchEvt.clientY, - e.ctrlKey, - e.altKey, - e.shiftKey, - e.metaKey, - e.button, - e.relatedTarget - ); - } - return mouseEvent; - } } diff --git a/src/js/L.PM.js b/src/js/L.PM.js index a4f04f05..bce41928 100644 --- a/src/js/L.PM.js +++ b/src/js/L.PM.js @@ -284,7 +284,7 @@ if (version === '1.7.1') { // https://github.com/Leaflet/Leaflet/issues/7775 a fix is already merged for the Leaflet 1.8.0 version Canvas.include({ _onClick(e) { - const point = this._map.mouseEventToLayerPoint(e); + const point = this._map.pointerEventToLayerPoint(e); let layer; let clickedLayer; diff --git a/src/js/Mixins/Dragging.js b/src/js/Mixins/Dragging.js index 99519115..e52a3cd4 100644 --- a/src/js/Mixins/Dragging.js +++ b/src/js/Mixins/Dragging.js @@ -57,24 +57,7 @@ const DragMixin = { // check if DOM element exists if (container) { - // add pointerdown event to trigger drag - if (getRenderer(this._layer) instanceof Canvas) { - this._layer.on( - 'touchstart pointerdown', - this._dragMixinOnMouseDown, - this - ); - this._map.pm._addTouchEvents(container); - } else { - // We can't just use layer.on('pointerdown') because on touch devices the event is not fired if user presses on the layer and then drag it. - // With checking on touchstart and pointerdown on the DOM element we can listen on the needed events - DomEvent.on( - container, - 'touchstart pointerdown', - this._simulateMouseDownEvent, - this - ); - } + this._layer.on('pointerdown', this._dragMixinOnPointerDown, this); } this._fireDragEnable(); @@ -106,22 +89,7 @@ const DragMixin = { const container = this._getDOMElem(); // check if DOM element exists if (container) { - if (getRenderer(this._layer) instanceof Canvas) { - this._layer.off( - 'touchstart pointerdown', - this._dragMixinOnMouseDown, - this - ); - this._map.pm._removeTouchEvents(container); - } else { - // disable pointerdown event - DomEvent.off( - container, - 'touchstart pointerdown', - this._simulateMouseDownEvent, - this - ); - } + this._layer.off('pointerdown', this._dragMixinOnPointerDown, this); } if (this._layerDragged) { @@ -138,49 +106,7 @@ const DragMixin = { layerDragEnabled() { return !!this._layerDragEnabled; }, - // We need to simulate a pointerdown event on the layer object. We can't just use layer.on('pointerdown') because on touch devices the event is not fired if user presses on the layer and then drag it. - // With checking on touchstart and pointerdown on the DOM element we can listen on the needed events - _simulateMouseDownEvent(e) { - const first = e.touches ? e.touches[0] : e; - const evt = { - originalEvent: first, - target: this._layer, - }; - // we expect in the function to get the clicked latlng / point - evt.containerPoint = this._map.pointerEventToContainerPoint(first); - evt.latlng = this._map.containerPointToLatLng(evt.containerPoint); - - this._dragMixinOnMouseDown(evt); - return false; - }, - _simulateMouseMoveEvent(e) { - const first = e.touches ? e.touches[0] : e; - const evt = { - originalEvent: first, - target: this._layer, - }; - // we expect in the function to get the clicked latlng / point - evt.containerPoint = this._map.pointerEventToContainerPoint(first); - evt.latlng = this._map.containerPointToLatLng(evt.containerPoint); - - this._dragMixinOnMouseMove(evt); - return false; - }, - _simulateMouseUpEvent(e) { - const first = e.touches ? e.touches[0] : e; - const evt = { - originalEvent: first, - target: this._layer, - }; - if (e.type.indexOf('touch') === -1) { - // we expect in the function to get the clicked latlng / point - evt.containerPoint = this._map.pointerEventToContainerPoint(e); - evt.latlng = this._map.containerPointToLatLng(evt.containerPoint); - } - this._dragMixinOnMouseUp(evt); - return false; - }, - _dragMixinOnMouseDown(e) { + _dragMixinOnPointerDown(e) { // cancel if pointer button is NOT the left button if (e.originalEvent.button > 0) { return; @@ -190,7 +116,7 @@ const DragMixin = { const fromLayerSync = e._fromLayerSync; // if other layers found, snapping will be disabled - const layersToSyncFound = this._syncLayers('_dragMixinOnMouseDown', e); + const layersToSyncFound = this._syncLayers('_dragMixinOnPointerDown', e); if (this._layer instanceof Marker) { if (this.options.snappable && !fromLayerSync && !layersToSyncFound) { @@ -229,27 +155,17 @@ const DragMixin = { // save for delta calculation this._tempDragCoord = e.latlng; - DomEvent.on( - this._map.getContainer(), - 'touchend pointerup', - this._simulateMouseUpEvent, - this - ); + this._map.on('pointerup', this._dragMixinOnPointerUp, this); // listen to pointermove on map (instead of polygon), // otherwise fast pointer movements stop the drag - DomEvent.on( - this._map.getContainer(), - 'touchmove pointermove', - this._simulateMouseMoveEvent, - this - ); + this._map.on('pointermove', this._dragMixinOnPointerMove, this); }, - _dragMixinOnMouseMove(e) { + _dragMixinOnPointerMove(e) { this._overwriteEventIfItComesFromMarker(e); const el = this._getDOMElem(); - this._syncLayers('_dragMixinOnMouseMove', e); + this._syncLayers('_dragMixinOnPointerMove', e); if (!this._dragging) { // set state @@ -282,10 +198,10 @@ const DragMixin = { this._layer.pm._updateHiddenPolyCircle(); } }, - _dragMixinOnMouseUp(e) { + _dragMixinOnPointerUp(e) { const el = this._getDOMElem(); - this._syncLayers('_dragMixinOnMouseUp', e); + this._syncLayers('_dragMixinOnPointerUp', e); // re-enable map drag if (this._originalMapDragState) { @@ -295,20 +211,10 @@ const DragMixin = { // if pointerup event fired, it's safe to cache the map draggable state on the next pointer down this._safeToCacheDragState = true; // clear up pointermove event - DomEvent.off( - this._map.getContainer(), - 'touchmove pointermove', - this._simulateMouseMoveEvent, - this - ); + this._map.off('pointermove', this._dragMixinOnPointerMove, this); // clear up pointerup event - DomEvent.off( - this._map.getContainer(), - 'touchend pointerup', - this._simulateMouseUpEvent, - this - ); + this._map.off('pointerup', this._dragMixinOnPointerUp, this); // if no drag happened, don't do anything if (!this._dragging) { From 8784bfcdd37a5e2720a7094e67a9a99edae47c89 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sat, 1 Nov 2025 22:30:52 +0100 Subject: [PATCH 16/41] Remove Canvas 1.7.1 polyfill --- src/js/L.PM.js | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/src/js/L.PM.js b/src/js/L.PM.js index bce41928..3b1886c1 100644 --- a/src/js/L.PM.js +++ b/src/js/L.PM.js @@ -20,8 +20,6 @@ import { Polygon, Polyline, Rectangle, - version, - Class, } from 'leaflet'; import packageInfo from '../../package.json'; @@ -279,35 +277,6 @@ const Geoman = { }, }; -if (version === '1.7.1') { - // Canvas Mode: After dragging the map the target layer can't be dragged anymore until it is clicked - // https://github.com/Leaflet/Leaflet/issues/7775 a fix is already merged for the Leaflet 1.8.0 version - Canvas.include({ - _onClick(e) { - const point = this._map.pointerEventToLayerPoint(e); - let layer; - let clickedLayer; - - for (let order = this._drawFirst; order; order = order.next) { - layer = order.layer; - if (layer.options.interactive && layer._containsPoint(point)) { - // changing e.type !== 'preclick' to e.type === 'preclick' fix the issue - if ( - !(e.type === 'click' || e.type === 'preclick') || - !this._map._draggableMoved(layer) - ) { - clickedLayer = layer; - } - } - } - if (clickedLayer) { - DomEvent.fakeStop(e); - this._fireEvent([clickedLayer], e); - } - }, - }); -} - // initialize leaflet-geoman // L.PM.initialize(); export default Geoman; From 6299a17e2307ad7d034ee3a1981d4d5435eb724f Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sat, 1 Nov 2025 22:32:25 +0100 Subject: [PATCH 17/41] Remove polyfills --- src/js/L.PM.js | 1 - src/js/polyfills.js | 144 -------------------------------------------- 2 files changed, 145 deletions(-) delete mode 100644 src/js/polyfills.js diff --git a/src/js/L.PM.js b/src/js/L.PM.js index 3b1886c1..b51ff0d3 100644 --- a/src/js/L.PM.js +++ b/src/js/L.PM.js @@ -23,7 +23,6 @@ import { } from 'leaflet'; import packageInfo from '../../package.json'; -import './polyfills'; import GeomanMap from './L.PM.Map'; import Toolbar from './Toolbar/L.PM.Toolbar'; diff --git a/src/js/polyfills.js b/src/js/polyfills.js deleted file mode 100644 index ebf2d8d3..00000000 --- a/src/js/polyfills.js +++ /dev/null @@ -1,144 +0,0 @@ -// Array.findIndex Polyfill -Array.prototype.findIndex = - Array.prototype.findIndex || - function (callback) { - if (this === null) { - throw new TypeError( - 'Array.prototype.findIndex called on null or undefined' - ); - } else if (typeof callback !== 'function') { - throw new TypeError('callback must be a function'); - } - var list = Object(this); - // Makes sures is always has an positive integer as length. - var length = list.length >>> 0; - var thisArg = arguments[1]; - for (var i = 0; i < length; i++) { - if (callback.call(thisArg, list[i], i, list)) { - return i; - } - } - return -1; - }; - -// Array.find Polyfill for IE<12. -// Requested here: https://github.com/geoman-io/leaflet-geoman/issues/173 -Array.prototype.find = - Array.prototype.find || - function (callback) { - if (this === null) { - throw new TypeError('Array.prototype.find called on null or undefined'); - } else if (typeof callback !== 'function') { - throw new TypeError('callback must be a function'); - } - var list = Object(this); - // Makes sures is always has an positive integer as length. - var length = list.length >>> 0; - var thisArg = arguments[1]; - for (var i = 0; i < length; i++) { - var element = list[i]; - if (callback.call(thisArg, element, i, list)) { - return element; - } - } - }; - -// Polyfill for Object.assign() -// https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill -if (typeof Object.assign != 'function') { - Object.assign = function (target) { - 'use strict'; - if (target == null) { - throw new TypeError('Cannot convert undefined or null to object'); - } - - target = Object(target); - for (var index = 1; index < arguments.length; index++) { - var source = arguments[index]; - if (source != null) { - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - } - return target; - }; -} - -// Polyfill for Element.remove() -// https://developer.mozilla.org/de/docs/Web/API/ChildNode/remove#Polyfill -(function (arr) { - arr.forEach(function (item) { - if (item.hasOwnProperty('remove')) { - return; - } - Object.defineProperty(item, 'remove', { - configurable: true, - enumerable: true, - writable: true, - value: function remove() { - this.parentNode.removeChild(this); - }, - }); - }); -})([Element.prototype, CharacterData.prototype, DocumentType.prototype]); - -// Polyfill for Array.includes() -// https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/includes#Polyfill -if (!Array.prototype.includes) { - Object.defineProperty(Array.prototype, 'includes', { - value: function (searchElement, fromIndex) { - if (this == null) { - throw new TypeError('"this" is null or not defined'); - } - - // 1. Let O be ? ToObject(this value). - var o = Object(this); - - // 2. Let len be ? ToLength(? Get(O, "length")). - var len = o.length >>> 0; - - // 3. If len is 0, return false. - if (len === 0) { - return false; - } - - // 4. Let n be ? ToInteger(fromIndex). - // (If fromIndex is undefined, this step produces the value 0.) - var n = fromIndex | 0; - - // 5. If n ≥ 0, then - // a. Let k be n. - // 6. Else n < 0, - // a. Let k be len + n. - // b. If k < 0, let k be 0. - var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); - - function sameValueZero(x, y) { - return ( - x === y || - (typeof x === 'number' && - typeof y === 'number' && - isNaN(x) && - isNaN(y)) - ); - } - - // 7. Repeat, while k < len - while (k < len) { - // a. Let elementK be the result of ? Get(O, ! ToString(k)). - // b. If SameValueZero(searchElement, elementK) is true, return true. - if (sameValueZero(o[k], searchElement)) { - return true; - } - // c. Increase k by 1. - k++; - } - - // 8. Return false - return false; - }, - }); -} From a66578ffd136fc8fa55667a25bb842ead1e32520 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 06:47:52 +0100 Subject: [PATCH 18/41] Remove "marker" property from pm:create event --- src/js/Mixins/Events.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/js/Mixins/Events.js b/src/js/Mixins/Events.js index 77819102..9d748bed 100644 --- a/src/js/Mixins/Events.js +++ b/src/js/Mixins/Events.js @@ -35,7 +35,6 @@ const EventMixin = { 'pm:create', { shape: this._shape, - marker: layer, // TODO: Deprecated layer, }, source, From 608a7fb189566b7ed63438f880545656170f61b0 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 06:48:59 +0100 Subject: [PATCH 19/41] Remove deprecated "Poly" shape alias --- src/js/L.PM.Map.js | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/js/L.PM.Map.js b/src/js/L.PM.Map.js index cd4fa936..dc7a310d 100644 --- a/src/js/L.PM.Map.js +++ b/src/js/L.PM.Map.js @@ -108,20 +108,10 @@ export default class GeomanMap extends Class { } enableDraw(shape = 'Polygon', options) { - // backwards compatible, remove after 3.0 - if (shape === 'Poly') { - shape = 'Polygon'; - } - this.Draw.enable(shape, options); } disableDraw(shape = 'Polygon') { - // backwards compatible, remove after 3.0 - if (shape === 'Poly') { - shape = 'Polygon'; - } - this.Draw.disable(shape); } From 845ef3be37d1794cfeca31c948bebd5a634e6aa2 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 06:50:55 +0100 Subject: [PATCH 20/41] Fix usage of removed "finishOnDoubleClick" option --- demo/demo-canvas.js | 3 +-- demo/demo.js | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/demo/demo-canvas.js b/demo/demo-canvas.js index 99a23db8..6604f323 100644 --- a/demo/demo-canvas.js +++ b/demo/demo-canvas.js @@ -179,8 +179,7 @@ map3.pm.enableDraw('Polygon', { }, markerStyle, cursorMarker: false, - // finishOn: 'contextmenu', - finishOnDoubleClick: true, + finishOn: 'dblclick', }); const scotland = new Polygon([ diff --git a/demo/demo.js b/demo/demo.js index 3246b51b..7510ce61 100644 --- a/demo/demo.js +++ b/demo/demo.js @@ -270,8 +270,7 @@ map3.pm.enableDraw('Polygon', { }, markerStyle, cursorMarker: false, - // finishOn: 'contextmenu', - finishOnDoubleClick: true, + finishOn: 'dblclick', }); const scotland = new Polygon([ From 16c9a5e36f48a00688ffd79fd7fad133ff1cbb56 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 06:53:38 +0100 Subject: [PATCH 21/41] Remove deprecated "editPolygon" & "deleteLayer" control aliases --- src/js/Toolbar/L.PM.Toolbar.js | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/js/Toolbar/L.PM.Toolbar.js b/src/js/Toolbar/L.PM.Toolbar.js index f89edd80..a90ffff0 100644 --- a/src/js/Toolbar/L.PM.Toolbar.js +++ b/src/js/Toolbar/L.PM.Toolbar.js @@ -105,14 +105,6 @@ export default class Toolbar extends Class { addControls(options = this.options) { // adds all buttons to the map specified inside options - // make button renaming backwards compatible - if (typeof options.editPolygon !== 'undefined') { - options.editMode = options.editPolygon; - } - if (typeof options.deleteLayer !== 'undefined') { - options.removalMode = options.deleteLayer; - } - // first set the options Util.setOptions(this, options); @@ -209,14 +201,6 @@ export default class Toolbar extends Class { // this just changes the state and is used if a functionality (like Draw) // is enabled manually via script - // backwards compatibility with button rename - if (name === 'editPolygon') { - name = 'editMode'; - } - if (name === 'deleteLayer') { - name = 'removalMode'; - } - const toggleBtnName = name; // as some mode got enabled, we still have to trigger the click on the other buttons From 19039a24f5b9ff7ed5b8c9c4372f5d4f6409f1ac Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 07:07:09 +0100 Subject: [PATCH 22/41] Eslint cypress/ --- cypress/e2e/circle.cy.js | 20 ++++++++++---------- cypress/e2e/globalmodes.cy.js | 18 +++++++++++++----- cypress/e2e/helpers.cy.js | 8 -------- cypress/support/commands.js | 6 +++--- cypress/support/e2e.js | 1 - eslint.config.js | 1 + 6 files changed, 27 insertions(+), 27 deletions(-) diff --git a/cypress/e2e/circle.cy.js b/cypress/e2e/circle.cy.js index 007e76fe..022c0392 100644 --- a/cypress/e2e/circle.cy.js +++ b/cypress/e2e/circle.cy.js @@ -502,9 +502,9 @@ describe('Draw Circle', () => { // change radius cy.get(mapSelector) - .trigger('pointerdown', 300, 200, {eventConstructor: 'PointerEvent'}) - .trigger('pointermove', 300, 250, {eventConstructor: 'PointerEvent'}) - .trigger('pointerup', 300, 250, {eventConstructor: 'PointerEvent'}); + .trigger('pointerdown', 300, 200, { eventConstructor: 'PointerEvent' }) + .trigger('pointermove', 300, 250, { eventConstructor: 'PointerEvent' }) + .trigger('pointerup', 300, 250, { eventConstructor: 'PointerEvent' }); cy.window().then(({ map }) => { const layer = map.pm.getGeomanLayers()[0]; @@ -515,9 +515,9 @@ describe('Draw Circle', () => { // change center cy.get(mapSelector) - .trigger('pointerdown', 200, 200, {eventConstructor: 'PointerEvent'}) - .trigger('pointermove', 200, 250, {eventConstructor: 'PointerEvent'}) - .trigger('pointerup', 200, 250, {eventConstructor: 'PointerEvent'}); + .trigger('pointerdown', 200, 200, { eventConstructor: 'PointerEvent' }) + .trigger('pointermove', 200, 250, { eventConstructor: 'PointerEvent' }) + .trigger('pointerup', 200, 250, { eventConstructor: 'PointerEvent' }); cy.window().then(({ map }) => { const layer = map.pm.getGeomanLayers()[0]; @@ -538,9 +538,9 @@ describe('Draw Circle', () => { // move marker cy.get(mapSelector) - .trigger('pointerdown', 400, 200, {eventConstructor: 'PointerEvent'}) - .trigger('pointermove', 390, 230, {eventConstructor: 'PointerEvent'}) - .trigger('pointerup', 390, 230, {eventConstructor: 'PointerEvent'}); + .trigger('pointerdown', 400, 200, { eventConstructor: 'PointerEvent' }) + .trigger('pointermove', 390, 230, { eventConstructor: 'PointerEvent' }) + .trigger('pointerup', 390, 230, { eventConstructor: 'PointerEvent' }); cy.window().then(({ map }) => { const layer = map.pm.getGeomanLayers()[1]; @@ -549,4 +549,4 @@ describe('Draw Circle', () => { expect(layer.getRadius()).to.eq(1240.3294565841613); }); }); -}); \ No newline at end of file +}); diff --git a/cypress/e2e/globalmodes.cy.js b/cypress/e2e/globalmodes.cy.js index 587b0fa2..f90a1317 100644 --- a/cypress/e2e/globalmodes.cy.js +++ b/cypress/e2e/globalmodes.cy.js @@ -48,7 +48,7 @@ describe('Modes', () => { ], }, }; - // eslint-disable-next-line prefer-destructuring + layer = new L.GeoJSON(geojson).addTo(map).getLayers()[0]; map.fitBounds(layer.getBounds()); @@ -65,7 +65,9 @@ describe('Modes', () => { cy.toolbarButton('edit').click(); // make the marker visible - cy.get(mapSelector).trigger('pointermove', 500, 120, { eventConstructor: 'PointerEvent' }); + cy.get(mapSelector).trigger('pointermove', 500, 120, { + eventConstructor: 'PointerEvent', + }); cy.get(mapSelector) .trigger('pointerdown', 495, 125, { eventConstructor: 'PointerEvent' }) @@ -79,10 +81,14 @@ describe('Modes', () => { }); // end dragging - cy.get(mapSelector).trigger('pointerup', 500, 307, { eventConstructor: 'PointerEvent' }); + cy.get(mapSelector).trigger('pointerup', 500, 307, { + eventConstructor: 'PointerEvent', + }); // make other marker visible - cy.get(mapSelector).trigger('pointermove', 310, 330, { eventConstructor: 'PointerEvent' }); + cy.get(mapSelector).trigger('pointermove', 310, 330, { + eventConstructor: 'PointerEvent', + }); cy.get('.leaflet-marker-icon').should((p) => { expect(p[0]).to.not.equal(markerHtml); @@ -155,7 +161,9 @@ describe('Modes', () => { const coords = poly.getLatLngs(); - const newPoly = new L.Polygon(coords, { pmIgnore: true }).addTo(testLayer); + const newPoly = new L.Polygon(coords, { pmIgnore: true }).addTo( + testLayer + ); poly.remove(); return newPoly; diff --git a/cypress/e2e/helpers.cy.js b/cypress/e2e/helpers.cy.js index 7c041dc8..fdcea47c 100644 --- a/cypress/e2e/helpers.cy.js +++ b/cypress/e2e/helpers.cy.js @@ -7,42 +7,34 @@ describe('Helper hasValues', () => { }); it('should return false for empty arrays', () => { - // eslint-disable-next-line no-unused-expressions expect(hasValues([])).to.be.false; }); it('should return false for empty nested arrays', () => { - // eslint-disable-next-line no-unused-expressions expect(hasValues([[[]]])).to.be.false; }); it('should return false for empty-like arrays', () => { - // eslint-disable-next-line no-unused-expressions expect(hasValues([undefined, null, ''])).to.be.false; }); it('should return false for empty-like nested arrays', () => { - // eslint-disable-next-line no-unused-expressions expect(hasValues([[[undefined], [null], ['']]])).to.be.false; }); it('should return true for non-empty arrays', () => { - // eslint-disable-next-line no-unused-expressions expect(hasValues([0])).to.be.true; }); it('should return true for non-empty nested arrays', () => { - // eslint-disable-next-line no-unused-expressions expect(hasValues([[[0]]])).to.be.true; }); it('should return true if there is at least one non-empty value', () => { - // eslint-disable-next-line no-unused-expressions expect(hasValues([undefined, null, '', 0])).to.be.true; }); it('should return true if there is at least one non-empty nested value', () => { - // eslint-disable-next-line no-unused-expressions expect(hasValues([[[undefined], [null, '', 1]]])).to.be.true; }); }); diff --git a/cypress/support/commands.js b/cypress/support/commands.js index 606f9e3e..d5c71a59 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -173,9 +173,9 @@ Cypress.Commands.add('drawShape', (shape, ignore) => { cy.fixture(shape) .as('poly') .then((json) => { - const layer = new L.Polygon(json.data.points, { pmIgnore: ignore }).addTo( - map - ); + const layer = new L.Polygon(json.data.points, { + pmIgnore: ignore, + }).addTo(map); const bounds = layer.getBounds(); map.fitBounds(bounds); }); diff --git a/cypress/support/e2e.js b/cypress/support/e2e.js index cdd8e064..53828db5 100644 --- a/cypress/support/e2e.js +++ b/cypress/support/e2e.js @@ -70,7 +70,6 @@ beforeEach(() => { try { this._onStop(this); } catch (e) { - /* eslint-disable-next-line no-console */ console.error(e); throw e; } diff --git a/eslint.config.js b/eslint.config.js index 4deb0765..472b9b09 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -26,6 +26,7 @@ module.exports = [ 'guard-for-in': 0, ...eslintPluginCypress.configs.recommended.rules, 'cypress/unsafe-to-chain-command': 0, + 'cypress/no-unnecessary-waiting': 0, }, }, eslintConfigPrettier, From 8df2aaaa24bf0a968870f024681504971d0b2b26 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 07:09:43 +0100 Subject: [PATCH 23/41] Replace "Line" with "Polyline" --- cypress/e2e/options.cy.js | 14 +++++++----- cypress/e2e/{line.cy.js => polyline.cy.js} | 12 +++++----- cypress/e2e/tooltips.cy.js | 2 +- demo/demo-canvas.js | 2 +- demo/demo.js | 6 ++--- leaflet-geoman.d.ts | 22 +++++++++---------- src/assets/icons/{Line.svg => Polyline.svg} | 0 src/css/controls.css | 2 +- src/js/Draw/L.PM.Draw.Polygon.js | 6 ++--- ....PM.Draw.Line.js => L.PM.Draw.Polyline.js} | 4 ++-- src/js/Draw/L.PM.Draw.js | 4 ++-- src/js/Edit/L.PM.Edit.Polygon.js | 2 +- ....PM.Edit.Line.js => L.PM.Edit.Polyline.js} | 2 +- src/js/Edit/L.PM.Edit.Rectangle.js | 2 +- src/js/L.PM.Map.js | 2 +- src/js/L.PM.js | 14 ++++++------ src/js/Mixins/Events.js | 8 +++---- src/js/Mixins/Snapping.js | 2 +- src/js/Toolbar/L.PM.Toolbar.js | 3 +-- src/js/helpers/index.js | 2 +- 20 files changed, 56 insertions(+), 55 deletions(-) rename cypress/e2e/{line.cy.js => polyline.cy.js} (97%) rename src/assets/icons/{Line.svg => Polyline.svg} (100%) rename src/js/Draw/{L.PM.Draw.Line.js => L.PM.Draw.Polyline.js} (99%) rename src/js/Edit/{L.PM.Edit.Line.js => L.PM.Edit.Polyline.js} (99%) diff --git a/cypress/e2e/options.cy.js b/cypress/e2e/options.cy.js index b3288bb9..795cf5d5 100644 --- a/cypress/e2e/options.cy.js +++ b/cypress/e2e/options.cy.js @@ -105,16 +105,18 @@ describe('Options', () => { map.pm.setPathOptions({ color: 'red', }); - expect(map.pm.Draw.Line.options.pathOptions.color).to.equal('red'); - expect(map.pm.Draw.Line.options.pathOptions.borderColor).to.equal( + expect(map.pm.Draw.Polyline.options.pathOptions.color).to.equal('red'); + expect(map.pm.Draw.Polyline.options.pathOptions.borderColor).to.equal( undefined ); map.pm.setPathOptions({ borderColor: 'green', }); - expect(map.pm.Draw.Line.options.pathOptions.color).to.equal(undefined); - expect(map.pm.Draw.Line.options.pathOptions.borderColor).to.equal( + expect(map.pm.Draw.Polyline.options.pathOptions.color).to.equal( + undefined + ); + expect(map.pm.Draw.Polyline.options.pathOptions.borderColor).to.equal( 'green' ); @@ -124,8 +126,8 @@ describe('Options', () => { }, { merge: true } ); - expect(map.pm.Draw.Line.options.pathOptions.color).to.equal('red'); - expect(map.pm.Draw.Line.options.pathOptions.borderColor).to.equal( + expect(map.pm.Draw.Polyline.options.pathOptions.color).to.equal('red'); + expect(map.pm.Draw.Polyline.options.pathOptions.borderColor).to.equal( 'green' ); }); diff --git a/cypress/e2e/line.cy.js b/cypress/e2e/polyline.cy.js similarity index 97% rename from cypress/e2e/line.cy.js rename to cypress/e2e/polyline.cy.js index cc441ab1..5bfbaa28 100644 --- a/cypress/e2e/line.cy.js +++ b/cypress/e2e/polyline.cy.js @@ -1,4 +1,4 @@ -describe('Draw & Edit Line', () => { +describe('Draw & Edit Polyline', () => { // map and leaflet object const mapSelector = '#map'; @@ -208,7 +208,7 @@ describe('Draw & Edit Line', () => { cy.get(mapSelector).click(200, 200).click(250, 250).click(250, 250); cy.window().then(({ map }) => { - const latlng = map.pm.Draw.Line._hintMarker.getLatLng(); + const latlng = map.pm.Draw.Polyline._hintMarker.getLatLng(); const pxLatLng = map.containerPointToLatLng([250, 250]); expect(pxLatLng).to.deep.equal(latlng); }); @@ -268,14 +268,14 @@ describe('Draw & Edit Line', () => { cy.get(mapSelector).click(350, 250).click(190, 160).click(190, 60); cy.window().then(({ map }) => { - map.pm.Draw.Line._finishShape(); + map.pm.Draw.Polyline._finishShape(); expect(1).to.eq(map.pm.getGeomanDrawLayers().length); }); cy.get(mapSelector).click(250, 50); cy.window().then(({ map }) => { - map.pm.Draw.Line._finishShape(); + map.pm.Draw.Polyline._finishShape(); expect(2).to.eq(map.pm.getGeomanDrawLayers().length); }); }); @@ -325,8 +325,8 @@ describe('Draw & Edit Line', () => { }; map.pm.setGlobalOptions({ templineStyle: style, hintlineStyle: style }); - const layer = map.pm.Draw.Line._layer; - const hintLine = map.pm.Draw.Line._hintline; + const layer = map.pm.Draw.Polyline._layer; + const hintLine = map.pm.Draw.Polyline._hintline; expect(layer.options.color).to.eql('red'); expect(hintLine.options.color).to.eql('red'); }); diff --git a/cypress/e2e/tooltips.cy.js b/cypress/e2e/tooltips.cy.js index 6ae8ba67..24d0a981 100644 --- a/cypress/e2e/tooltips.cy.js +++ b/cypress/e2e/tooltips.cy.js @@ -96,7 +96,7 @@ describe('Shows Tooltips', () => { cy.get('.leaflet-tooltip-bottom').should('not.exist'); }); - it('Has Line Tooltips', () => { + it('Has Polyline Tooltips', () => { cy.get('.leaflet-tooltip-bottom').should('not.exist'); // activate polygon drawing diff --git a/demo/demo-canvas.js b/demo/demo-canvas.js index 6604f323..c35a5e65 100644 --- a/demo/demo-canvas.js +++ b/demo/demo-canvas.js @@ -108,7 +108,7 @@ map2.pm.disableDraw('Polygon'); // cursorMarker: true // }); -map2.pm.enableDraw('Line', { allowSelfIntersection: false }); +map2.pm.enableDraw('Polyline', { allowSelfIntersection: false }); map2.pm.enableDraw('Polygon', { allowSelfIntersection: false }); map2.on('pm:globaleditmodetoggled', (e) => { diff --git a/demo/demo.js b/demo/demo.js index 7510ce61..ac03fa90 100644 --- a/demo/demo.js +++ b/demo/demo.js @@ -109,7 +109,7 @@ map2.pm.addControls({ // cursorMarker: true // }); -// map2.pm.enableDraw('Line', { allowSelfIntersection: false }); +// map2.pm.enableDraw('Polyline', { allowSelfIntersection: false }); // map2.pm.enableDraw('Polygon', { allowSelfIntersection: false }); map2.on('pm:globaleditmodetoggled', (e) => { @@ -349,8 +349,8 @@ polygonLayer.on('pm:intersect', (e) => { map2.pm.enableDraw('Polygon', { allowSelfIntersection: false }); map2.pm.disableDraw('Polygon'); -map2.pm.enableDraw('Line', { allowSelfIntersection: false }); -map2.pm.disableDraw('Line'); +map2.pm.enableDraw('Polyline', { allowSelfIntersection: false }); +map2.pm.disableDraw('Polyline'); map2.on('pm:create', (e) => { // e.layer.pm.enable({ allowSelfIntersection: false }); diff --git a/leaflet-geoman.d.ts b/leaflet-geoman.d.ts index 0ab086d5..5d0d00d2 100644 --- a/leaflet-geoman.d.ts +++ b/leaflet-geoman.d.ts @@ -840,7 +840,7 @@ declare module 'leaflet' { type SUPPORTED_SHAPES = | 'Marker' | 'Circle' - | 'Line' + | 'Polyline' | 'Rectangle' | 'Polygon' | 'Cut' @@ -1141,7 +1141,7 @@ declare module 'leaflet' { /** Control can be toggled. */ doToggle?: boolean; - /** Extending Class f. ex. Line, Polygon, ... L.PM.Draw.EXTENDINGCLASS */ + /** Extending Class f. ex. Polyline, Polygon, ... L.PM.Draw.EXTENDINGCLASS */ jsClass?: string; /** Function fired when clicking the control. */ @@ -1210,7 +1210,7 @@ declare module 'leaflet' { /** Add the created layers to a layergroup instead to the map. */ layerGroup?: L.Map | L.LayerGroup; - /** Prioritize the order of snapping. Default: ['Marker','CircleMarker','Circle','Line','Polygon','Rectangle']. */ + /** Prioritize the order of snapping. Default: ['Marker','CircleMarker','Circle','Polyline','Polygon','Rectangle']. */ snappingOrder?: SUPPORTED_SHAPES[]; /** Defines in which panes the layers and helper vertices are created. Default: { vertexPane: 'markerPane', layerPane: 'overlayPane', markerPane: 'markerPane' } */ @@ -1630,7 +1630,7 @@ declare module 'leaflet' { } interface DrawShape { - /** Applies the styles (templineStyle, hintlineStyle, pathOptions, markerStyle) to the drawing layer. map.pm.Draw.Line.setStyle(options). */ + /** Applies the styles (templineStyle, hintlineStyle, pathOptions, markerStyle) to the drawing layer. map.pm.Draw.Polyline.setStyle(options). */ setStyle(options: L.PathOptions | L.CircleMarkerOptions): void; /** Set path options */ @@ -1736,7 +1736,7 @@ declare module 'leaflet' { /** Dragging can be disabled for the layer. (default:true). */ draggable?: boolean; - /** Leaflet layer event to add a vertex to a Line or Polygon, like dblclick. (default:click). */ + /** Leaflet layer event to add a vertex to a Polyline or Polygon, like dblclick. (default:click). */ addVertexOn?: | 'click' | 'dblclick' @@ -1745,10 +1745,10 @@ declare module 'leaflet' { | 'pointerout' | 'contextmenu'; - /** A function for validation if a vertex (of a Line / Polygon) is allowed to add. It passes a object with `[layer, marker, event}`. For example to check if the layer has a certain property or if the `Ctrl` key is pressed. (default:undefined). */ + /** A function for validation if a vertex (of a Polyline / Polygon) is allowed to add. It passes a object with `[layer, marker, event}`. For example to check if the layer has a certain property or if the `Ctrl` key is pressed. (default:undefined). */ addVertexValidation?: VertexValidationHandler; - /** Leaflet layer event to remove a vertex from a Line or Polygon, like dblclick. (default:contextmenu). */ + /** Leaflet layer event to remove a vertex from a Polyline or Polygon, like dblclick. (default:contextmenu). */ removeVertexOn?: | 'click' | 'dblclick' @@ -1757,7 +1757,7 @@ declare module 'leaflet' { | 'pointerout' | 'contextmenu'; - /** A function for validation if a vertex (of a Line / Polygon) is allowed to remove. It passes a object with `[layer, marker, event}`. For example to check if the layer has a certain property or if the `Ctrl` key is pressed. */ + /** A function for validation if a vertex (of a Polyline / Polygon) is allowed to remove. It passes a object with `[layer, marker, event}`. For example to check if the layer has a certain property or if the `Ctrl` key is pressed. */ removeVertexValidation?: VertexValidationHandler; /** A function for validation if a vertex / helper-marker is allowed to move / drag. It passes a object with `[layer, marker, event}`. For example to check if the layer has a certain property or if the `Ctrl` key is pressed. */ @@ -1980,7 +1980,7 @@ declare module 'leaflet' { /** Adds button to draw CircleMarkers (default:true) */ drawCircleMarker?: boolean; - /** Adds button to draw Line (default:true) */ + /** Adds button to draw Polyline (default:true) */ drawPolyline?: boolean; /** Adds button to draw Rectangle (default:true) */ @@ -2001,7 +2001,7 @@ declare module 'leaflet' { /** Adds button to toggle drag mode for all layers (default:true) */ dragMode?: boolean; - /** Adds button to cut a hole in a polygon or line (default:true) */ + /** Adds button to cut a hole in a polygon or polyline (default:true) */ cutPolygon?: boolean; /** Adds a button to remove layers (default:true) */ @@ -2115,7 +2115,7 @@ declare module 'leaflet' { /** Returns true if edit mode is enabled. false when disabled. */ enabled(): boolean; - /** Returns true if Line or Polygon has a self intersection. */ + /** Returns true if Polyline or Polygon has a self intersection. */ hasSelfIntersection(): boolean; /** Removes the layer with the same checks as GlobalRemovalMode. */ diff --git a/src/assets/icons/Line.svg b/src/assets/icons/Polyline.svg similarity index 100% rename from src/assets/icons/Line.svg rename to src/assets/icons/Polyline.svg diff --git a/src/css/controls.css b/src/css/controls.css index ebbc72d7..dadde1c5 100644 --- a/src/css/controls.css +++ b/src/css/controls.css @@ -62,7 +62,7 @@ background-image: url('../assets/icons/Polygon.svg'); } .leaflet-pm-toolbar .leaflet-pm-icon-polyline { - background-image: url('../assets/icons/Line.svg'); + background-image: url('../assets/icons/Polyline.svg'); } .leaflet-pm-toolbar .leaflet-pm-icon-circle { background-image: url('../assets/icons/Circle.svg'); diff --git a/src/js/Draw/L.PM.Draw.Polygon.js b/src/js/Draw/L.PM.Draw.Polygon.js index 38e86043..200ef3c3 100644 --- a/src/js/Draw/L.PM.Draw.Polygon.js +++ b/src/js/Draw/L.PM.Draw.Polygon.js @@ -1,7 +1,7 @@ import { DivIcon, Marker, Polygon } from 'leaflet'; import { getTranslation } from '../helpers'; import Draw from './L.PM.Draw'; -import GeomanDrawLine from './L.PM.Draw.Line'; +import GeomanDrawLine from './L.PM.Draw.Polyline'; export default class GeomanDrawPolygon extends GeomanDrawLine { initialize(map) { @@ -11,8 +11,8 @@ export default class GeomanDrawPolygon extends GeomanDrawLine { } enable(options) { - Draw.Line.prototype.enable.call(this, options); - // Overwrite the shape "Line" of this._layer + Draw.Polyline.prototype.enable.call(this, options); + // Overwrite the shape "Polyline" of this._layer this._layer.pm._shape = 'Polygon'; } diff --git a/src/js/Draw/L.PM.Draw.Line.js b/src/js/Draw/L.PM.Draw.Polyline.js similarity index 99% rename from src/js/Draw/L.PM.Draw.Line.js rename to src/js/Draw/L.PM.Draw.Polyline.js index 1b5bf245..1d1c047b 100644 --- a/src/js/Draw/L.PM.Draw.Line.js +++ b/src/js/Draw/L.PM.Draw.Polyline.js @@ -8,7 +8,7 @@ import Utils from '../L.PM.Utils'; export default class GeomanDrawPolyline extends Draw { initialize(map) { this._map = map; - this._shape = 'Line'; + this._shape = 'Polyline'; this.toolbarButtonName = 'drawPolyline'; this._doesSelfIntersect = false; } @@ -330,7 +330,7 @@ export default class GeomanDrawPolyline extends Draw { const markerPrevious = markers[markers.length - 1]; - // no need for findDeepMarkerIndex because the coords are always flat (Polyline) no matter if Line or Polygon + // no need for findDeepMarkerIndex because the coords are always flat (Polyline) no matter if Polyline or Polygon const indexMarkerPrev = coords.indexOf(markerPrevious.getLatLng()); // +1 don't cut out the previous marker diff --git a/src/js/Draw/L.PM.Draw.js b/src/js/Draw/L.PM.Draw.js index 08bc2b56..d03a4789 100644 --- a/src/js/Draw/L.PM.Draw.js +++ b/src/js/Draw/L.PM.Draw.js @@ -83,7 +83,7 @@ export default class Draw extends Class { this.shapes = [ 'Marker', 'CircleMarker', - 'Line', + 'Polyline', 'Polygon', 'Rectangle', 'Circle', @@ -226,7 +226,7 @@ export default class Draw extends Class { drawMarker: 'Marker', drawCircle: 'Circle', drawPolygon: 'Polygon', - drawPolyline: 'Line', + drawPolyline: 'Polyline', drawRectangle: 'Rectangle', drawCircleMarker: 'CircleMarker', editMode: 'Edit', diff --git a/src/js/Edit/L.PM.Edit.Polygon.js b/src/js/Edit/L.PM.Edit.Polygon.js index a2b5e557..4d675671 100644 --- a/src/js/Edit/L.PM.Edit.Polygon.js +++ b/src/js/Edit/L.PM.Edit.Polygon.js @@ -1,6 +1,6 @@ import lineIntersect from '@turf/line-intersect'; import { Polyline } from 'leaflet'; -import GeomanEditPolyline from './L.PM.Edit.Line'; +import GeomanEditPolyline from './L.PM.Edit.Polyline'; export default class GeomanEditPolygon extends GeomanEditPolyline { _shape = 'Polygon'; diff --git a/src/js/Edit/L.PM.Edit.Line.js b/src/js/Edit/L.PM.Edit.Polyline.js similarity index 99% rename from src/js/Edit/L.PM.Edit.Line.js rename to src/js/Edit/L.PM.Edit.Polyline.js index 97fb86e3..d13b636e 100644 --- a/src/js/Edit/L.PM.Edit.Line.js +++ b/src/js/Edit/L.PM.Edit.Polyline.js @@ -28,7 +28,7 @@ export default class GeomanEditPolyline extends Edit { this.include(MarkerLimits); } - _shape = 'Line'; + _shape = 'Polyline'; initialize(layer) { this._layer = layer; diff --git a/src/js/Edit/L.PM.Edit.Rectangle.js b/src/js/Edit/L.PM.Edit.Rectangle.js index aef6928c..165fa28b 100644 --- a/src/js/Edit/L.PM.Edit.Rectangle.js +++ b/src/js/Edit/L.PM.Edit.Rectangle.js @@ -82,7 +82,7 @@ export default class GeomanEditRectangle extends GeomanEditPolygon { }); } - // Empty callback for 'contextmenu' binding set in L.PM.Edit.Line.js's _createMarker method (AKA, right-click on marker event) + // Empty callback for 'contextmenu' binding set in L.PM.Edit.Polyline.js's _createMarker method (AKA, right-click on marker event) // (A Rectangle is designed to always remain a "true" rectangle -- if you want it editable, use Polygon Tool instead!!!) _removeMarker() { // The method, it does nothing!!! diff --git a/src/js/L.PM.Map.js b/src/js/L.PM.Map.js index dc7a310d..0823ae7c 100644 --- a/src/js/L.PM.Map.js +++ b/src/js/L.PM.Map.js @@ -35,7 +35,7 @@ export default class GeomanMap extends Class { 'Marker', 'CircleMarker', 'Circle', - 'Line', + 'Polyline', 'Polygon', 'Rectangle', ], diff --git a/src/js/L.PM.js b/src/js/L.PM.js index b51ff0d3..af66af95 100644 --- a/src/js/L.PM.js +++ b/src/js/L.PM.js @@ -30,7 +30,7 @@ import Toolbar from './Toolbar/L.PM.Toolbar'; import Draw from './Draw/L.PM.Draw'; import GeomanDrawCircleMarker from './Draw/L.PM.Draw.CircleMarker'; import GeomanDrawCircle from './Draw/L.PM.Draw.Circle'; -import GeomanDrawPolyline from './Draw/L.PM.Draw.Line'; +import GeomanDrawPolyline from './Draw/L.PM.Draw.Polyline'; import GeomanDrawMarker from './Draw/L.PM.Draw.Marker'; import GeomanDrawPolygon from './Draw/L.PM.Draw.Polygon'; import GeomanDrawRectangle from './Draw/L.PM.Draw.Rectangle'; @@ -39,7 +39,7 @@ import GeomanDrawText from './Draw/L.PM.Draw.Text'; Draw.CircleMarker = GeomanDrawCircleMarker; Draw.Circle = GeomanDrawCircle; -Draw.Line = GeomanDrawPolyline; +Draw.Polyline = GeomanDrawPolyline; Draw.Marker = GeomanDrawMarker; Draw.Polygon = GeomanDrawPolygon; Draw.Rectangle = GeomanDrawRectangle; @@ -51,7 +51,7 @@ import GeomanEditCircleMarker from './Edit/L.PM.Edit.CircleMarker'; import GeomanEditCircle from './Edit/L.PM.Edit.Circle'; import GeomanEditImageOverlay from './Edit/L.PM.Edit.ImageOverlay'; import GeomanEditLayerGroup from './Edit/L.PM.Edit.LayerGroup'; -import GeomanEditPolyline from './Edit/L.PM.Edit.Line'; +import GeomanEditPolyline from './Edit/L.PM.Edit.Polyline'; import GeomanEditMarker from './Edit/L.PM.Edit.Marker'; import GeomanEditPolygon from './Edit/L.PM.Edit.Polygon'; import GeomanEditRectangle from './Edit/L.PM.Edit.Rectangle'; @@ -61,7 +61,7 @@ Edit.CircleMarker = GeomanEditCircleMarker; Edit.Circle = GeomanEditCircle; Edit.ImageOverlay = GeomanEditImageOverlay; Edit.LayerGroup = GeomanEditLayerGroup; -Edit.Line = GeomanEditPolyline; +Edit.Polyline = GeomanEditPolyline; Edit.Marker = GeomanEditMarker; Edit.Polygon = GeomanEditPolygon; Edit.Rectangle = GeomanEditRectangle; @@ -171,10 +171,10 @@ const Geoman = { if (Geoman.optIn) { if (this.options.pmIgnore === false) { - this.pm = new Edit.Line(this); + this.pm = new Edit.Polyline(this); } } else if (!this.options.pmIgnore) { - this.pm = new Edit.Line(this); + this.pm = new Edit.Polyline(this); } } @@ -267,7 +267,7 @@ const Geoman = { } else if (layer instanceof Polygon) { layer.pm = new Edit.Polygon(layer); } else if (layer instanceof Polyline) { - layer.pm = new Edit.Line(layer); + layer.pm = new Edit.Polyline(layer); } else if (layer instanceof LayerGroup) { layer.pm = new Edit.LayerGroup(layer); } else if (layer instanceof ImageOverlay) { diff --git a/src/js/Mixins/Events.js b/src/js/Mixins/Events.js index 9d748bed..1c707bc8 100644 --- a/src/js/Mixins/Events.js +++ b/src/js/Mixins/Events.js @@ -124,7 +124,7 @@ const EventMixin = { ); }, // Fired when a vertex-marker is started dragging - // indexPath is only passed from Line / Polygon + // indexPath is only passed from Polyline / Polygon _fireMarkerDragStart( e, indexPath = undefined, @@ -145,7 +145,7 @@ const EventMixin = { ); }, // Fired while dragging a vertex-marker - // indexPath is only passed from Line / Polygon + // indexPath is only passed from Polyline / Polygon _fireMarkerDrag( e, indexPath = undefined, @@ -166,7 +166,7 @@ const EventMixin = { ); }, // Fired when a vertex-marker is stopped dragging - // indexPath and intersectionReset is only passed from Line / Polygon + // indexPath and intersectionReset is only passed from Polyline / Polygon _fireMarkerDragEnd( e, indexPath = undefined, @@ -313,7 +313,7 @@ const EventMixin = { customPayload ); }, - // Fired when a Line / Polygon has self intersection + // Fired when a Polyline / Polygon has self intersection _fireIntersect( intersection, fireLayer = this._layer, diff --git a/src/js/Mixins/Snapping.js b/src/js/Mixins/Snapping.js index 9d84fe4b..4da2a6bb 100644 --- a/src/js/Mixins/Snapping.js +++ b/src/js/Mixins/Snapping.js @@ -466,7 +466,7 @@ const SnapMixin = { 'Marker', 'CircleMarker', 'Circle', - 'Line', + 'Polyline', 'Polygon', 'Rectangle', ]; diff --git a/src/js/Toolbar/L.PM.Toolbar.js b/src/js/Toolbar/L.PM.Toolbar.js index a90ffff0..87681702 100644 --- a/src/js/Toolbar/L.PM.Toolbar.js +++ b/src/js/Toolbar/L.PM.Toolbar.js @@ -253,7 +253,7 @@ export default class Toolbar extends Class { const drawLineButton = { className: 'control-icon leaflet-pm-icon-polyline', title: getTranslation('buttonTitles.drawLineButton'), - jsClass: 'Line', + jsClass: 'Polyline', onClick: () => {}, afterClick: (e, ctx) => { // toggle drawing mode @@ -715,7 +715,6 @@ export default class Toolbar extends Class { Polygon: 'drawPolygon', Rectangle: 'drawRectangle', Polyline: 'drawPolyline', - Line: 'drawPolyline', CircleMarker: 'drawCircleMarker', Edit: 'editMode', Drag: 'dragMode', diff --git a/src/js/helpers/index.js b/src/js/helpers/index.js index e2de0a7d..31b54801 100644 --- a/src/js/helpers/index.js +++ b/src/js/helpers/index.js @@ -236,7 +236,7 @@ export function prioritiseSort(key, _sortingOrder, order = 'asc') { return 'Polygon'; } if (layer instanceof Polyline) { - return 'Line'; + return 'Polyline'; } return undefined; } From 3d9ada297531993c88f4799b5c4f0b3b9e537777 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 07:16:47 +0100 Subject: [PATCH 24/41] Remove default shape argument in enable-/disableDraw --- cypress/e2e/events.cy.js | 6 +++--- demo/demo-canvas.js | 6 +++--- demo/demo.js | 10 +++++----- leaflet-geoman.d.ts | 2 +- src/js/L.PM.Map.js | 6 +++--- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/cypress/e2e/events.cy.js b/cypress/e2e/events.cy.js index 89f1c1b5..5b4121b2 100644 --- a/cypress/e2e/events.cy.js +++ b/cypress/e2e/events.cy.js @@ -172,7 +172,7 @@ describe('Events', () => { map.on('pm:globaldrawmodetoggled', (e) => { calledevent = e.type; }); - map.pm.disableDraw('Polygon'); + map.pm.disableDraw(); }) .then(() => { cy.wait(100); @@ -202,7 +202,7 @@ describe('Events', () => { map.on('pm:globalcutmodetoggled', (e) => { calledevent = e.type; }); - map.pm.disableDraw('Cut'); + map.pm.disableDraw(); }) .then(() => { cy.wait(100); @@ -271,7 +271,7 @@ describe('Events', () => { map.on('pm:drawend', (e) => { calledevent = e.type; }); - map.pm.disableDraw('Polygon'); + map.pm.disableDraw(); }) .then(() => { cy.wait(100); diff --git a/demo/demo-canvas.js b/demo/demo-canvas.js index c35a5e65..6b89b9ee 100644 --- a/demo/demo-canvas.js +++ b/demo/demo-canvas.js @@ -102,7 +102,7 @@ map2.pm.addControls({ removalMode: true, }); -map2.pm.disableDraw('Polygon'); +map2.pm.disableDraw(); // map2.pm.enableDraw('Circle', { // snappable: true, // cursorMarker: true @@ -363,12 +363,12 @@ map4.pm.addControls({ map4.pm.enableDraw('Polygon', { finishOn: 'pointerout', }); -map4.pm.disableDraw('Polygon'); +map4.pm.disableDraw(); map4.pm.enableDraw('Marker', { snappable: false, }); -map4.pm.disableDraw('Marker'); +map4.pm.disableDraw(); // map4.pm.setPathOptions({ // color: 'orange', diff --git a/demo/demo.js b/demo/demo.js index ac03fa90..be8a5a4f 100644 --- a/demo/demo.js +++ b/demo/demo.js @@ -103,7 +103,7 @@ map2.pm.addControls({ removalMode: true, }); -// map2.pm.disableDraw('Polygon'); +// map2.pm.disableDraw(); // map2.pm.enableDraw('Circle', { // snappable: true, // cursorMarker: true @@ -348,9 +348,9 @@ polygonLayer.on('pm:intersect', (e) => { // map2.pm.disableGlobalEditMode(); map2.pm.enableDraw('Polygon', { allowSelfIntersection: false }); -map2.pm.disableDraw('Polygon'); +map2.pm.disableDraw(); map2.pm.enableDraw('Polyline', { allowSelfIntersection: false }); -map2.pm.disableDraw('Polyline'); +map2.pm.disableDraw(); map2.on('pm:create', (e) => { // e.layer.pm.enable({ allowSelfIntersection: false }); @@ -456,12 +456,12 @@ map4.pm.addControls({ map4.pm.enableDraw('Polygon', { finishOn: 'pointerout', }); -map4.pm.disableDraw('Polygon'); +map4.pm.disableDraw(); map4.pm.enableDraw('Marker', { snappable: false, }); -map4.pm.disableDraw('Marker'); +map4.pm.disableDraw(); // map4.pm.setPathOptions({ // color: 'orange', diff --git a/leaflet-geoman.d.ts b/leaflet-geoman.d.ts index 5d0d00d2..2fd07657 100644 --- a/leaflet-geoman.d.ts +++ b/leaflet-geoman.d.ts @@ -1250,7 +1250,7 @@ declare module 'leaflet' { enableDraw(shape: SUPPORTED_SHAPES, options?: DrawModeOptions): void; /** Disable all drawing */ - disableDraw(shape?: SUPPORTED_SHAPES): void; + disableDraw(): void; /** Enable Custom Shape Draw Mode with a passed shape from the storage or as GeoJSON. ⭐ */ enableCustomShapeDraw( diff --git a/src/js/L.PM.Map.js b/src/js/L.PM.Map.js index 0823ae7c..186d191e 100644 --- a/src/js/L.PM.Map.js +++ b/src/js/L.PM.Map.js @@ -107,12 +107,12 @@ export default class GeomanMap extends Class { return this.Toolbar.isVisible; } - enableDraw(shape = 'Polygon', options) { + enableDraw(shape, options) { this.Draw.enable(shape, options); } - disableDraw(shape = 'Polygon') { - this.Draw.disable(shape); + disableDraw() { + this.Draw.disable(); } // optionsModifier for special options like ignoreShapes or merge From 397124bb9790cbeeb2f118e2d4906f43d44259b9 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 07:27:55 +0100 Subject: [PATCH 25/41] Remove deprecated "editable" option --- cypress/e2e/circlemarker.cy.js | 11 +++++++---- leaflet-geoman.d.ts | 5 ----- src/js/Draw/L.PM.Draw.CircleMarker.js | 5 ----- src/js/Edit/L.PM.Edit.CircleMarker.js | 11 +++-------- src/js/L.PM.Map.js | 10 ++-------- 5 files changed, 12 insertions(+), 30 deletions(-) diff --git a/cypress/e2e/circlemarker.cy.js b/cypress/e2e/circlemarker.cy.js index 8bf2d7bc..e357ad5c 100644 --- a/cypress/e2e/circlemarker.cy.js +++ b/cypress/e2e/circlemarker.cy.js @@ -568,9 +568,12 @@ describe('Draw Circle Marker', () => { }); }); - it('draw a CircleMarker like a Circle with deprecated option `editable`', () => { + it('draw a CircleMarker like a Circle with option `resizeableCircleMarker`', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ editable: true, continueDrawing: false }); + map.pm.setGlobalOptions({ + resizeableCircleMarker: true, + continueDrawing: false, + }); }); cy.toolbarButton('circle-marker') @@ -590,9 +593,9 @@ describe('Draw Circle Marker', () => { cy.hasVertexMarkers(2); }); - it('on vertex click - editable', (done) => { + it('on vertex click - resizeableCircleMarker', (done) => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ editable: true }); + map.pm.setGlobalOptions({ resizeableCircleMarker: true }); }); cy.toolbarButton('circle-marker') diff --git a/leaflet-geoman.d.ts b/leaflet-geoman.d.ts index 2fd07657..e3edc4fd 100644 --- a/leaflet-geoman.d.ts +++ b/leaflet-geoman.d.ts @@ -1895,11 +1895,6 @@ declare module 'leaflet' { /** Set the max radius of a CircleMarker. (default:null). */ maxRadiusCircleMarker?: number; - /** - * @deprecated Use resizeableCircleMarker instead - */ - editable?: boolean; - /** Enables radius editing while drawing a Circle (default:true). */ resizeableCircle?: boolean; diff --git a/src/js/Draw/L.PM.Draw.CircleMarker.js b/src/js/Draw/L.PM.Draw.CircleMarker.js index ce5c366d..5494e644 100644 --- a/src/js/Draw/L.PM.Draw.CircleMarker.js +++ b/src/js/Draw/L.PM.Draw.CircleMarker.js @@ -30,11 +30,6 @@ export default class GeomanDrawCircleMarker extends Draw { // TODO: Think about if these options could be passed globally for all // instances of L.PM.Draw. So a dev could set drawing style one time as some kind of config Util.setOptions(this, options); - // TODO: remove with next major release - if (this.options.editable) { - this.options.resizeableCircleMarker = this.options.editable; - delete this.options.editable; - } // change enabled state this._enabled = true; diff --git a/src/js/Edit/L.PM.Edit.CircleMarker.js b/src/js/Edit/L.PM.Edit.CircleMarker.js index adcc5ef8..91c11ab6 100644 --- a/src/js/Edit/L.PM.Edit.CircleMarker.js +++ b/src/js/Edit/L.PM.Edit.CircleMarker.js @@ -29,11 +29,6 @@ export default class GeomanEditCircleMarker extends Edit { // TODO: remove default option in next major Release enable(options = { draggable: true, snappable: true }) { Util.setOptions(this, options); - // TODO: remove with next major release - if (this.options.editable) { - this.options.resizeableCircleMarker = this.options.editable; - delete this.options.editable; - } // layer is not allowed to edit // cancel when map isn't available, this happens when it is removed before this fires @@ -92,7 +87,7 @@ export default class GeomanEditCircleMarker extends Edit { return; } - // disable dragging of non-editable circle + // disable dragging of non-resizeable circle if (this.layerDragEnabled()) { this.disableLayerDrag(); } @@ -377,7 +372,7 @@ export default class GeomanEditCircleMarker extends Edit { this._map.pm.Draw.CircleMarker._layerIsDragging = false; } - // _initSnappableMarkers when option editable is not true + // _initSnappableMarkers when option resizeable is not true _initSnappableMarkersDrag() { const marker = this._layer; @@ -395,7 +390,7 @@ export default class GeomanEditCircleMarker extends Edit { marker.on('pm:dragstart', this._unsnap, this); } - // _disableSnapping when option editable is not true + // _disableSnapping when option resizeable is not true _disableSnappingDrag() { const marker = this._layer; diff --git a/src/js/L.PM.Map.js b/src/js/L.PM.Map.js index 186d191e..8e91abc5 100644 --- a/src/js/L.PM.Map.js +++ b/src/js/L.PM.Map.js @@ -135,13 +135,7 @@ export default class GeomanMap extends Class { // merge passed and existing options const options = merge(this.globalOptions, o); - // TODO: remove with next major release - if (options.editable) { - options.resizeableCircleMarker = options.editable; - delete options.editable; - } - - // check if switched the editable mode for CircleMarker while drawing + // check if switched the resizeable mode for CircleMarker while drawing let reenableCircleMarker = false; if ( this.map.pm.Draw.CircleMarker.enabled() && @@ -151,7 +145,7 @@ export default class GeomanMap extends Class { this.map.pm.Draw.CircleMarker.disable(); reenableCircleMarker = true; } - // check if switched the editable mode for Circle while drawing + // check if switched the resizeable mode for Circle while drawing let reenableCircle = false; if ( this.map.pm.Draw.Circle.enabled() && From 9c9d71d03e9dadec4baa76922fb750e6c525c5ed Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 07:52:54 +0100 Subject: [PATCH 26/41] Replace markerdrag with vertexdrag events --- cypress/e2e/events.cy.js | 4 ++-- cypress/e2e/globalmodes.cy.js | 2 +- demo/demo-canvas.js | 8 ++++---- demo/demo.js | 8 ++++---- demo/events.js | 6 +++--- leaflet-geoman.d.ts | 24 ++++++++++++------------ src/js/Edit/L.PM.Edit.Circle.js | 2 +- src/js/Edit/L.PM.Edit.CircleMarker.js | 25 +++++++++++-------------- src/js/Edit/L.PM.Edit.Polyline.js | 22 +++++++++++----------- src/js/Edit/L.PM.Edit.Rectangle.js | 18 +++++++++--------- src/js/Mixins/Events.js | 12 ++++++------ 11 files changed, 64 insertions(+), 67 deletions(-) diff --git a/cypress/e2e/events.cy.js b/cypress/e2e/events.cy.js index 5b4121b2..56a5168e 100644 --- a/cypress/e2e/events.cy.js +++ b/cypress/e2e/events.cy.js @@ -409,8 +409,8 @@ describe('Events', () => { layer.on('pm:vertexremoved', logEvent); /* TODO Can't tested --> needs dragging - layer.on('pm:markerdragstart', logEvent); - layer.on('pm:markerdragend', logEvent); + layer.on('pm:vertexdragstart', logEvent); + layer.on('pm:vertexdragend', logEvent); layer.on('pm:snap', logEvent); layer.on('pm:snapdrag', logEvent); layer.on('pm:unsnap', logEvent); diff --git a/cypress/e2e/globalmodes.cy.js b/cypress/e2e/globalmodes.cy.js index f90a1317..f612a575 100644 --- a/cypress/e2e/globalmodes.cy.js +++ b/cypress/e2e/globalmodes.cy.js @@ -57,7 +57,7 @@ describe('Modes', () => { allowSelfIntersection: false, }); - layer.on('pm:markerdragstart', (e) => { + layer.on('pm:vertexdragstart', (e) => { markerHtml = e.markerEvent.target._icon; }); }); diff --git a/demo/demo-canvas.js b/demo/demo-canvas.js index 6b89b9ee..75cb424c 100644 --- a/demo/demo-canvas.js +++ b/demo/demo-canvas.js @@ -266,7 +266,7 @@ map2.on('pm:create', (e) => { // e.layer.pm.disable(); // console.log(e.layer.pm.hasSelfIntersection()); - e.layer.on('pm:markerdragend', (x) => { + e.layer.on('pm:vertexdragend', (x) => { console.log(x); }); @@ -294,7 +294,7 @@ polygonLayer.on('pm:vertexremoved', (x) => { console.log(x); }); -polygonLayer.on('pm:markerdragstart', (x) => { +polygonLayer.on('pm:vertexdragstart', (x) => { console.log(x); }); @@ -390,10 +390,10 @@ layerGroup.on('pm:drag', (e) => { layerGroup.on('pm:dragend', (e) => { console.log(e); }); -layerGroup.on('pm:markerdragstart', (e) => { +layerGroup.on('pm:vertexdragstart', (e) => { console.log(e); }); -layerGroup.on('pm:markerdragend', (e) => { +layerGroup.on('pm:vertexdragend', (e) => { console.log(e); }); diff --git a/demo/demo.js b/demo/demo.js index be8a5a4f..d06aa6df 100644 --- a/demo/demo.js +++ b/demo/demo.js @@ -357,7 +357,7 @@ map2.on('pm:create', (e) => { // e.layer.pm.disable(); // console.log(e.layer.pm.hasSelfIntersection()); - e.layer.on('pm:markerdragend', (x) => { + e.layer.on('pm:vertexdragend', (x) => { console.log(x); }); @@ -385,7 +385,7 @@ polygonLayer.on('pm:vertexremoved', (e) => { console.log(e); }); -polygonLayer.on('pm:markerdragstart', (e) => { +polygonLayer.on('pm:vertexdragstart', (e) => { console.log(e); }); @@ -483,10 +483,10 @@ layerGroup.on('pm:drag', (e) => { layerGroup.on('pm:dragend', (e) => { console.log(e); }); -layerGroup.on('pm:markerdragstart', (e) => { +layerGroup.on('pm:vertexdragstart', (e) => { console.log(e); }); -layerGroup.on('pm:markerdragend', (e) => { +layerGroup.on('pm:vertexdragend', (e) => { console.log(e); }); diff --git a/demo/events.js b/demo/events.js index a8d3348d..c949675f 100644 --- a/demo/events.js +++ b/demo/events.js @@ -46,9 +46,9 @@ map.on('pm:create', (e) => { layer.on('pm:disable', logEvent); layer.on('pm:vertexadded', logEvent); layer.on('pm:vertexremoved', logEvent); - layer.on('pm:markerdragstart', logEvent); - layer.on('pm:markerdrag', logEvent); - layer.on('pm:markerdragend', logEvent); + layer.on('pm:vertexdragstart', logEvent); + layer.on('pm:vertexdrag', logEvent); + layer.on('pm:vertexdragend', logEvent); layer.on('pm:snap', logEvent); layer.on('pm:snapdrag', logEvent); layer.on('pm:unsnap', logEvent); diff --git a/leaflet-geoman.d.ts b/leaflet-geoman.d.ts index e3edc4fd..4dedb748 100644 --- a/leaflet-geoman.d.ts +++ b/leaflet-geoman.d.ts @@ -299,19 +299,19 @@ declare module 'leaflet' { off(type: 'pm:vertexclick', fn?: PM.VertexClickEventHandler): this; /** Fired when dragging of a marker which corresponds to a vertex starts. */ - on(type: 'pm:markerdragstart', fn: PM.MarkerDragStartEventHandler): this; - once(type: 'pm:markerdragstart', fn: PM.MarkerDragStartEventHandler): this; - off(type: 'pm:markerdragstart', fn?: PM.MarkerDragStartEventHandler): this; + on(type: 'pm:vertexdragstart', fn: PM.VertexDragStartEventHandler): this; + once(type: 'pm:vertexdragstart', fn: PM.VertexDragStartEventHandler): this; + off(type: 'pm:vertexdragstart', fn?: PM.VertexDragStartEventHandler): this; /** Fired when dragging a vertex-marker. */ - on(type: 'pm:markerdrag', fn: PM.MarkerDragEventHandler): this; - once(type: 'pm:markerdrag', fn: PM.MarkerDragEventHandler): this; - off(type: 'pm:markerdrag', fn?: PM.MarkerDragEventHandler): this; + on(type: 'pm:vertexdrag', fn: PM.VertexDragEventHandler): this; + once(type: 'pm:vertexdrag', fn: PM.VertexDragEventHandler): this; + off(type: 'pm:vertexdrag', fn?: PM.VertexDragEventHandler): this; /** Fired when dragging of a vertex-marker ends. */ - on(type: 'pm:markerdragend', fn: PM.MarkerDragEndEventHandler): this; - once(type: 'pm:markerdragend', fn: PM.MarkerDragEndEventHandler): this; - off(type: 'pm:markerdragend', fn?: PM.MarkerDragEndEventHandler): this; + on(type: 'pm:vertexdragend', fn: PM.VertexDragEndEventHandler): this; + once(type: 'pm:vertexdragend', fn: PM.VertexDragEndEventHandler): this; + off(type: 'pm:vertexdragend', fn?: PM.VertexDragEndEventHandler): this; /** Fired when coords of a layer are reset. E.g. by self-intersection. */ on(type: 'pm:layerreset', fn: PM.LayerResetEventHandler): this; @@ -2344,19 +2344,19 @@ declare module 'leaflet' { markerEvent: any; shape: PM.SUPPORTED_SHAPES; }) => void; - export type MarkerDragStartEventHandler = (e: { + export type VertexDragStartEventHandler = (e: { layer: L.Layer; indexPath: number; markerEvent: any; shape: PM.SUPPORTED_SHAPES; }) => void; - export type MarkerDragEventHandler = (e: { + export type VertexDragEventHandler = (e: { layer: L.Layer; indexPath: number; markerEvent: any; shape: PM.SUPPORTED_SHAPES; }) => void; - export type MarkerDragEndEventHandler = (e: { + export type VertexDragEndEventHandler = (e: { layer: L.Layer; indexPath: number; markerEvent: any; diff --git a/src/js/Edit/L.PM.Edit.Circle.js b/src/js/Edit/L.PM.Edit.Circle.js index d3ef1b3d..082833a5 100644 --- a/src/js/Edit/L.PM.Edit.Circle.js +++ b/src/js/Edit/L.PM.Edit.Circle.js @@ -40,7 +40,7 @@ export default class GeomanEditCircle extends GeomanEditCircleMarker { _onDragStart() {} - _extedingMarkerDragEnd() {} + _onDragEnd() {} _updateHiddenPolyCircle() { const crsSimple = this._map && this._map.pm._isCRSSimple(); diff --git a/src/js/Edit/L.PM.Edit.CircleMarker.js b/src/js/Edit/L.PM.Edit.CircleMarker.js index 91c11ab6..656909ae 100644 --- a/src/js/Edit/L.PM.Edit.CircleMarker.js +++ b/src/js/Edit/L.PM.Edit.CircleMarker.js @@ -63,8 +63,7 @@ export default class GeomanEditCircleMarker extends Edit { _extendingEnable() { // if CircleMarker is dragged while draw mode this._layer.on('pm:dragstart', this._onDragStart, this); - this._layer.on('pm:drag', this._onMarkerDrag, this); - this._layer.on('pm:dragend', this._onMarkerDragEnd, this); + this._layer.on('pm:dragend', this._onDragEnd, this); } disable() { @@ -239,9 +238,9 @@ export default class GeomanEditCircleMarker extends Edit { marker._origLatLng = latlng; marker._pmTempLayer = true; - marker.on('dragstart', this._onMarkerDragStart, this); - marker.on('drag', this._onMarkerDrag, this); - marker.on('dragend', this._onMarkerDragEnd, this); + marker.on('dragstart', this._onVertexDragStart, this); + marker.on('drag', this._onVertexDrag, this); + marker.on('dragend', this._onVertexDragEnd, this); marker.on('click', this._onVertexClick, this); this._helperLayers.addLayer(marker); @@ -332,15 +331,15 @@ export default class GeomanEditCircleMarker extends Edit { this._map.pm.Draw.CircleMarker._layerIsDragging = true; } - _onMarkerDragStart(e) { + _onVertexDragStart(e) { if (!this._vertexValidation('move', e)) { return; } - this._fireMarkerDragStart(e); + this._fireVertexDragStart(e); } - _onMarkerDrag(e) { + _onVertexDrag(e) { // dragged marker const draggedMarker = e.target; if ( @@ -350,12 +349,10 @@ export default class GeomanEditCircleMarker extends Edit { return; } - this._fireMarkerDrag(e); + this._fireVertexDrag(e); } - _onMarkerDragEnd(e) { - this._extedingMarkerDragEnd(); - + _onVertexDragEnd(e) { // dragged marker const draggedMarker = e.target; if (!this._vertexValidationDragEnd(draggedMarker)) { @@ -365,10 +362,10 @@ export default class GeomanEditCircleMarker extends Edit { this._fireEdit(); this._layerEdited = true; } - this._fireMarkerDragEnd(e); + this._fireVertexDragEnd(e); } - _extedingMarkerDragEnd() { + _onDragEnd() { this._map.pm.Draw.CircleMarker._layerIsDragging = false; } diff --git a/src/js/Edit/L.PM.Edit.Polyline.js b/src/js/Edit/L.PM.Edit.Polyline.js index d13b636e..801c8650 100644 --- a/src/js/Edit/L.PM.Edit.Polyline.js +++ b/src/js/Edit/L.PM.Edit.Polyline.js @@ -214,9 +214,9 @@ export default class GeomanEditPolyline extends Edit { marker.on('dragend', this._onRotateEnd, this); } else { marker.on('click', this._onVertexClick, this); - marker.on('dragstart', this._onMarkerDragStart, this); - marker.on('move', this._onMarkerDrag, this); - marker.on('dragend', this._onMarkerDragEnd, this); + marker.on('dragstart', this._onVertexDragStart, this); + marker.on('move', this._onVertexDrag, this); + marker.on('dragend', this._onVertexDragEnd, this); if (!this.options.preventMarkerRemoval) { marker.on(this.options.removeVertexOn, this._removeMarker, this); @@ -617,7 +617,7 @@ export default class GeomanEditPolyline extends Edit { this._fireChange(this._layer.getLatLngs(), 'Edit'); } - updatePolygonCoordsFromMarkerDrag(marker) { + updatePolygonCoordsFromVertexDrag(marker) { // update polygon coords const coords = this._layer.getLatLngs(); @@ -693,7 +693,7 @@ export default class GeomanEditPolyline extends Edit { return true; } - _onMarkerDragStart(e) { + _onVertexDragStart(e) { const marker = e.target; this._preventRenderingMarkers(true); @@ -708,7 +708,7 @@ export default class GeomanEditPolyline extends Edit { const { indexPath } = Utils.findDeepMarkerIndex(this._markers, marker); - this._fireMarkerDragStart(e, indexPath); + this._fireVertexDragStart(e, indexPath); // if self intersection isn't allowed, save the coords upon dragstart // in case we need to reset the layer @@ -730,7 +730,7 @@ export default class GeomanEditPolyline extends Edit { } } - _onMarkerDrag(e) { + _onVertexDrag(e) { // dragged marker const marker = e.target; @@ -762,7 +762,7 @@ export default class GeomanEditPolyline extends Edit { return; } - this.updatePolygonCoordsFromMarkerDrag(marker); + this.updatePolygonCoordsFromVertexDrag(marker); // the dragged markers neighbors const markerArr = @@ -802,11 +802,11 @@ export default class GeomanEditPolyline extends Edit { if (!this.options.allowSelfIntersection) { this._handleLayerStyle(); } - this._fireMarkerDrag(e, indexPath); + this._fireVertexDrag(e, indexPath); this._fireChange(this._layer.getLatLngs(), 'Edit'); } - _onMarkerDragEnd(e) { + _onVertexDragEnd(e) { const marker = e.target; this._preventRenderingMarkers(false); @@ -831,7 +831,7 @@ export default class GeomanEditPolyline extends Edit { const intersectionReset = !this.options.allowSelfIntersection && intersection; - this._fireMarkerDragEnd(e, indexPath, intersectionReset); + this._fireVertexDragEnd(e, indexPath, intersectionReset); if (intersectionReset) { // reset coordinates diff --git a/src/js/Edit/L.PM.Edit.Rectangle.js b/src/js/Edit/L.PM.Edit.Rectangle.js index 165fa28b..80ce8297 100644 --- a/src/js/Edit/L.PM.Edit.Rectangle.js +++ b/src/js/Edit/L.PM.Edit.Rectangle.js @@ -71,9 +71,9 @@ export default class GeomanEditRectangle extends GeomanEditPolygon { // Add marker events after adding the snapping events to the markers, beacause of the execution order _addMarkerEvents() { this._markers[0].forEach((marker) => { - marker.on('dragstart', this._onMarkerDragStart, this); - marker.on('drag', this._onMarkerDrag, this); - marker.on('dragend', this._onMarkerDragEnd, this); + marker.on('dragstart', this._onVertexDragStart, this); + marker.on('drag', this._onVertexDrag, this); + marker.on('dragend', this._onVertexDragEnd, this); // TODO: Can we remove this? The _removeMarker Event is a empty function if (!this.options.preventMarkerRemoval) { @@ -89,7 +89,7 @@ export default class GeomanEditRectangle extends GeomanEditPolygon { return null; } - _onMarkerDragStart(e) { + _onVertexDragStart(e) { if (!this._vertexValidation('move', e)) { return; } @@ -111,10 +111,10 @@ export default class GeomanEditRectangle extends GeomanEditPolygon { draggedMarker ); - this._fireMarkerDragStart(e, indexPath); + this._fireVertexDragStart(e, indexPath); } - _onMarkerDrag(e) { + _onVertexDrag(e) { // dragged marker const draggedMarker = e.target; @@ -133,11 +133,11 @@ export default class GeomanEditRectangle extends GeomanEditPolygon { this._markers, draggedMarker ); - this._fireMarkerDrag(e, indexPath); + this._fireVertexDrag(e, indexPath); this._fireChange(this._layer.getLatLngs(), 'Edit'); } - _onMarkerDragEnd(e) { + _onVertexDragEnd(e) { // dragged marker const draggedMarker = e.target; if (!this._vertexValidationDragEnd(draggedMarker)) { @@ -153,7 +153,7 @@ export default class GeomanEditRectangle extends GeomanEditPolygon { this._markers, draggedMarker ); - this._fireMarkerDragEnd(e, indexPath); + this._fireVertexDragEnd(e, indexPath); // fire edit event this._fireEdit(); diff --git a/src/js/Mixins/Events.js b/src/js/Mixins/Events.js index 1c707bc8..2936e29d 100644 --- a/src/js/Mixins/Events.js +++ b/src/js/Mixins/Events.js @@ -125,7 +125,7 @@ const EventMixin = { }, // Fired when a vertex-marker is started dragging // indexPath is only passed from Polyline / Polygon - _fireMarkerDragStart( + _fireVertexDragStart( e, indexPath = undefined, source = 'Edit', @@ -133,7 +133,7 @@ const EventMixin = { ) { this.__fire( this._layer, - 'pm:markerdragstart', + 'pm:vertexdragstart', { layer: this._layer, markerEvent: e, @@ -146,7 +146,7 @@ const EventMixin = { }, // Fired while dragging a vertex-marker // indexPath is only passed from Polyline / Polygon - _fireMarkerDrag( + _fireVertexDrag( e, indexPath = undefined, source = 'Edit', @@ -154,7 +154,7 @@ const EventMixin = { ) { this.__fire( this._layer, - 'pm:markerdrag', + 'pm:vertexdrag', { layer: this._layer, markerEvent: e, @@ -167,7 +167,7 @@ const EventMixin = { }, // Fired when a vertex-marker is stopped dragging // indexPath and intersectionReset is only passed from Polyline / Polygon - _fireMarkerDragEnd( + _fireVertexDragEnd( e, indexPath = undefined, intersectionReset = undefined, @@ -176,7 +176,7 @@ const EventMixin = { ) { this.__fire( this._layer, - 'pm:markerdragend', + 'pm:vertexdragend', { layer: this._layer, markerEvent: e, From 83d10fbfa334c755ca87966dd5a5b3002c6917ab Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 07:55:48 +0100 Subject: [PATCH 27/41] Remove depracted methods globalEditEnabled & globalRemovalEnabled --- src/js/Mixins/Modes/Mode.Edit.js | 4 ---- src/js/Mixins/Modes/Mode.Removal.js | 4 ---- 2 files changed, 8 deletions(-) diff --git a/src/js/Mixins/Modes/Mode.Edit.js b/src/js/Mixins/Modes/Mode.Edit.js index 0dda2998..4a4ab2b2 100644 --- a/src/js/Mixins/Modes/Mode.Edit.js +++ b/src/js/Mixins/Modes/Mode.Edit.js @@ -64,10 +64,6 @@ const GlobalEditMode = { // fire event this._fireGlobalEditModeToggled(false); }, - // TODO: Remove in the next major release - globalEditEnabled() { - return this.globalEditModeEnabled(); - }, globalEditModeEnabled() { return this._globalEditModeEnabled; }, diff --git a/src/js/Mixins/Modes/Mode.Removal.js b/src/js/Mixins/Modes/Mode.Removal.js index 13cf2658..11be6ac8 100644 --- a/src/js/Mixins/Modes/Mode.Removal.js +++ b/src/js/Mixins/Modes/Mode.Removal.js @@ -48,10 +48,6 @@ const GlobalRemovalMode = { this._fireGlobalRemovalModeToggled(false); }, - // TODO: Remove in the next major release - globalRemovalEnabled() { - return this.globalRemovalModeEnabled(); - }, globalRemovalModeEnabled() { return !!this._globalRemovalModeEnabled; }, From f2effdde85ce775a83505b771cc98f01c8527dcd Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 09:29:22 +0100 Subject: [PATCH 28/41] Add leaflet-geoman prefix to css classes --- cypress/e2e/circle.cy.js | 76 +++++------ cypress/e2e/circlemarker.cy.js | 90 ++++++------ cypress/e2e/globalmodes.cy.js | 20 +-- cypress/e2e/layergroup.cy.js | 12 +- cypress/e2e/marker.cy.js | 4 +- cypress/e2e/polygon.cy.js | 126 +++++++++-------- cypress/e2e/polyline.cy.js | 66 +++++---- cypress/e2e/rectangle.cy.js | 72 +++++----- cypress/e2e/rotation.cy.js | 52 +++---- cypress/e2e/text.cy.js | 95 ++++++++----- cypress/e2e/toolbar.cy.js | 190 +++++++++++++++----------- cypress/e2e/tooltips.cy.js | 4 +- cypress/support/commands.js | 10 +- demo/customcontrols.js | 2 +- src/css/controls.css | 155 +++++++++++---------- src/css/layers.css | 42 +++--- src/js/Draw/L.PM.Draw.CircleMarker.js | 12 +- src/js/Draw/L.PM.Draw.Marker.js | 4 +- src/js/Draw/L.PM.Draw.Polygon.js | 2 +- src/js/Draw/L.PM.Draw.Polyline.js | 12 +- src/js/Draw/L.PM.Draw.Rectangle.js | 22 +-- src/js/Draw/L.PM.Draw.Text.js | 17 ++- src/js/Edit/L.PM.Edit.Circle.js | 2 +- src/js/Edit/L.PM.Edit.CircleMarker.js | 4 +- src/js/Edit/L.PM.Edit.Polyline.js | 14 +- src/js/Edit/L.PM.Edit.Rectangle.js | 2 +- src/js/Edit/L.PM.Edit.Text.js | 8 +- src/js/Mixins/Dragging.js | 8 +- src/js/Toolbar/L.Controls.js | 37 +++-- src/js/Toolbar/L.PM.Toolbar.js | 68 ++++----- 30 files changed, 667 insertions(+), 561 deletions(-) diff --git a/cypress/e2e/circle.cy.js b/cypress/e2e/circle.cy.js index 022c0392..e2a5559c 100644 --- a/cypress/e2e/circle.cy.js +++ b/cypress/e2e/circle.cy.js @@ -16,19 +16,19 @@ describe('Draw Circle', () => { it('draws a circle', () => { cy.toolbarButton('circle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); - cy.get(mapSelector).should('have.class', 'geoman-draw-cursor'); + cy.get(mapSelector).should('have.class', 'leaflet-geoman-draw-cursor'); cy.get(mapSelector).click(200, 200).click(250, 250); - cy.get(mapSelector).should('not.have.class', 'geoman-draw-cursor'); + cy.get(mapSelector).should('not.have.class', 'leaflet-geoman-draw-cursor'); cy.toolbarButton('edit') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.hasVertexMarkers(2); cy.hasMiddleMarkers(0); @@ -78,8 +78,8 @@ describe('Draw Circle', () => { it('uses correct options from setPathOptions', () => { cy.toolbarButton('circle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.window().then(({ map, L }) => { map.pm.setPathOptions({ @@ -106,8 +106,8 @@ describe('Draw Circle', () => { cy.toolbarButton('circle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // draw first circle cy.get(mapSelector).click(200, 200).click(250, 250); @@ -130,8 +130,8 @@ describe('Draw Circle', () => { it('set max radius of circle', () => { cy.toolbarButton('circle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.window().then(({ map, L }) => { new L.Marker(map.getCenter()).addTo(map); @@ -155,8 +155,8 @@ describe('Draw Circle', () => { it('set min radius of circle', () => { cy.toolbarButton('circle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.window().then(({ map, L }) => { new L.Marker(map.getCenter()).addTo(map); @@ -271,8 +271,8 @@ describe('Draw Circle', () => { it('removes circle if enabled', () => { cy.toolbarButton('circle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(250, 250); @@ -288,8 +288,8 @@ describe('Draw Circle', () => { it('check if snapping works with max radius of circle', () => { cy.toolbarButton('circle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(350, 250).click(450, 250); @@ -312,8 +312,8 @@ describe('Draw Circle', () => { it('change color of circle while drawing', () => { cy.toolbarButton('circle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200); cy.get(mapSelector).trigger('pointermove', 300, 300); @@ -334,8 +334,8 @@ describe('Draw Circle', () => { it('fires disable event only if it was enabled', () => { cy.toolbarButton('circle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200); cy.get(mapSelector).click(300, 300); @@ -366,8 +366,8 @@ describe('Draw Circle', () => { cy.toolbarButton('circle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200); cy.get(mapSelector).click(300, 300); @@ -375,8 +375,8 @@ describe('Draw Circle', () => { cy.toolbarButton('edit') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.hasCircleLayers(3); }); @@ -388,8 +388,8 @@ describe('Draw Circle', () => { cy.toolbarButton('circle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200); cy.get(mapSelector).click(300, 300); @@ -412,15 +412,15 @@ describe('Draw Circle', () => { cy.toolbarButton('circle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200); cy.toolbarButton('edit') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.hasCircleLayers(1); @@ -436,8 +436,8 @@ describe('Draw Circle', () => { cy.toolbarButton('circle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).trigger('pointermove', 300, 300); @@ -455,8 +455,8 @@ describe('Draw Circle', () => { it('on vertex click', (done) => { cy.toolbarButton('circle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200); cy.get(mapSelector).click(300, 200); @@ -481,8 +481,8 @@ describe('Draw Circle', () => { it('checks if editing with snappable:false works', () => { cy.toolbarButton('circle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200); cy.get(mapSelector).click(300, 200); diff --git a/cypress/e2e/circlemarker.cy.js b/cypress/e2e/circlemarker.cy.js index e357ad5c..1ac11bcf 100644 --- a/cypress/e2e/circlemarker.cy.js +++ b/cypress/e2e/circlemarker.cy.js @@ -19,8 +19,8 @@ describe('Draw Circle Marker', () => { cy.toolbarButton('circle-marker') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // Should have the hint circle marker cy.hasCircleLayers(1); @@ -59,7 +59,7 @@ describe('Draw Circle Marker', () => { map.eachLayer((layer) => { if (layer instanceof L.CircleMarker) { assert.isFalse( - layer._path.classList.contains('leaflet-pm-draggable'), + layer._path.classList.contains('leaflet-geoman-draggable'), 'not draggable' ); } @@ -72,7 +72,7 @@ describe('Draw Circle Marker', () => { map.eachLayer((layer) => { if (layer instanceof L.CircleMarker) { assert.isTrue( - layer._path.classList.contains('leaflet-pm-draggable'), + layer._path.classList.contains('leaflet-geoman-draggable'), 'draggable' ); } @@ -85,7 +85,7 @@ describe('Draw Circle Marker', () => { map.eachLayer((layer) => { if (layer instanceof L.CircleMarker) { assert.isFalse( - layer._path.classList.contains('leaflet-pm-draggable'), + layer._path.classList.contains('leaflet-geoman-draggable'), 'not draggable' ); } @@ -100,8 +100,8 @@ describe('Draw Circle Marker', () => { cy.toolbarButton('delete') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector) .click(150, 245) @@ -124,21 +124,21 @@ describe('Draw Circle Marker', () => { cy.toolbarButton('circle-marker') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); - cy.get(mapSelector).should('have.class', 'geoman-draw-cursor'); + cy.get(mapSelector).should('have.class', 'leaflet-geoman-draw-cursor'); cy.get(mapSelector).click(200, 200).click(250, 250); - cy.get(mapSelector).should('not.have.class', 'geoman-draw-cursor'); + cy.get(mapSelector).should('not.have.class', 'leaflet-geoman-draw-cursor'); cy.hasCircleLayers(1); cy.toolbarButton('edit') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.hasVertexMarkers(2); }); @@ -153,8 +153,8 @@ describe('Draw Circle Marker', () => { cy.toolbarButton('circle-marker') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // draw first circle cy.get(mapSelector).click(200, 200).click(250, 250); @@ -182,15 +182,15 @@ describe('Draw Circle Marker', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(400, 350); cy.toolbarButton('edit') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.hasVertexMarkers(4); }); @@ -206,8 +206,8 @@ describe('Draw Circle Marker', () => { cy.get(mapSelector).click(350, 350); cy.toolbarButton('circle-marker') - .closest('.button-container') - .should('have.not.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.not.class', 'leaflet-geoman-active'); cy.toolbarButton('edit').click(); cy.hasLayers(3); @@ -253,8 +253,8 @@ describe('Draw Circle Marker', () => { it('set max radius of circleMarker', () => { cy.toolbarButton('circle-marker') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.window().then(({ map, L }) => { new L.Marker(map.getCenter()).addTo(map); @@ -279,8 +279,8 @@ describe('Draw Circle Marker', () => { it('set min radius of circleMarker', () => { cy.toolbarButton('circle-marker') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.window().then(({ map, L }) => { new L.Marker(map.getCenter()).addTo(map); @@ -423,8 +423,8 @@ describe('Draw Circle Marker', () => { cy.toolbarButton('circle-marker') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(350, 250).click(190, 60); @@ -434,8 +434,8 @@ describe('Draw Circle Marker', () => { cy.toolbarButton('edit') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.hasLayers(7); cy.window().then(({ map }) => { @@ -453,8 +453,8 @@ describe('Draw Circle Marker', () => { }); cy.toolbarButton('circle-marker') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(320, 250).click(450, 250); @@ -476,8 +476,8 @@ describe('Draw Circle Marker', () => { it('change color of circleMarker while drawing', () => { cy.toolbarButton('circle-marker') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).trigger('pointermove', 300, 300); @@ -499,8 +499,8 @@ describe('Draw Circle Marker', () => { cy.toolbarButton('circle-marker') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200); cy.get(mapSelector).trigger('pointermove', 300, 300); @@ -525,8 +525,8 @@ describe('Draw Circle Marker', () => { cy.toolbarButton('circle-marker') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200); cy.get(mapSelector).click(300, 300); @@ -550,8 +550,8 @@ describe('Draw Circle Marker', () => { it('disable dragging correctly', () => { cy.toolbarButton('circle-marker') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200); @@ -578,8 +578,8 @@ describe('Draw Circle Marker', () => { cy.toolbarButton('circle-marker') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(250, 250); @@ -587,8 +587,8 @@ describe('Draw Circle Marker', () => { cy.toolbarButton('edit') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.hasVertexMarkers(2); }); @@ -600,8 +600,8 @@ describe('Draw Circle Marker', () => { cy.toolbarButton('circle-marker') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200); cy.get(mapSelector).click(300, 200); diff --git a/cypress/e2e/globalmodes.cy.js b/cypress/e2e/globalmodes.cy.js index f612a575..98e66728 100644 --- a/cypress/e2e/globalmodes.cy.js +++ b/cypress/e2e/globalmodes.cy.js @@ -109,7 +109,9 @@ describe('Modes', () => { cy.hasTotalVertexMarkers(3); - cy.get('.marker-icon:not(.marker-icon-middle)') + cy.get( + '.leaflet-geoman-vertex-icon:not(.leaflet-geoman-vertex-icon-middle)' + ) .first() .trigger('contextmenu'); @@ -331,8 +333,8 @@ describe('Modes', () => { it('Test removal when preventMarkerRemoval is passed to global options', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(400, 350); @@ -344,8 +346,8 @@ describe('Modes', () => { cy.toolbarButton('delete') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 300); @@ -383,12 +385,12 @@ describe('Modes', () => { cy.toolbarButton('delete') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.toolbarButton('edit') - .closest('.button-container') - .should('not.have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('not.have.class', 'leaflet-geoman-active'); }); it('re-applies drag mode onAdd', () => { diff --git a/cypress/e2e/layergroup.cy.js b/cypress/e2e/layergroup.cy.js index 92fcdfb2..a023bd77 100644 --- a/cypress/e2e/layergroup.cy.js +++ b/cypress/e2e/layergroup.cy.js @@ -67,8 +67,8 @@ describe('Edit LayerGroup', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(400, 350); @@ -151,8 +151,8 @@ describe('Edit LayerGroup', () => { // activate polygon drawing cy.toolbarButton('polygon') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // draw a polygon cy.get(mapSelector) @@ -166,8 +166,8 @@ describe('Edit LayerGroup', () => { // activate cutting drawing cy.toolbarButton('cut') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // draw a polygon to cut cy.get(mapSelector) diff --git a/cypress/e2e/marker.cy.js b/cypress/e2e/marker.cy.js index befb16dc..f1224f76 100644 --- a/cypress/e2e/marker.cy.js +++ b/cypress/e2e/marker.cy.js @@ -298,8 +298,8 @@ describe('Draw Marker', () => { it('change icon of Marker while drawing', () => { cy.toolbarButton('marker') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).trigger('pointermove', 300, 300); diff --git a/cypress/e2e/polygon.cy.js b/cypress/e2e/polygon.cy.js index 215d53b0..a10fce6b 100644 --- a/cypress/e2e/polygon.cy.js +++ b/cypress/e2e/polygon.cy.js @@ -4,7 +4,7 @@ describe('Draw & Edit Poly', () => { it('drages shared vertices when pinned', () => { cy.toolbarButton('polygon').click(); - cy.get(mapSelector).should('have.class', 'geoman-draw-cursor'); + cy.get(mapSelector).should('have.class', 'leaflet-geoman-draw-cursor'); cy.get(mapSelector) .click(120, 150) @@ -13,7 +13,7 @@ describe('Draw & Edit Poly', () => { .click(300, 200) .click(120, 150); - cy.get(mapSelector).should('not.have.class', 'geoman-draw-cursor'); + cy.get(mapSelector).should('not.have.class', 'leaflet-geoman-draw-cursor'); cy.toolbarButton('marker').click(); @@ -201,7 +201,7 @@ describe('Draw & Edit Poly', () => { cy.get(mapSelector).click(90, 250).click(100, 350); - cy.get('.active .action-finish').click(); + cy.get('.leaflet-geoman-active .action-finish').click(); cy.toolbarButton('edit').click(); @@ -377,11 +377,11 @@ describe('Draw & Edit Poly', () => { cy.hasVertexMarkers(4); - cy.get('.active .action-removeLastVertex').click(); + cy.get('.leaflet-geoman-active .action-removeLastVertex').click(); cy.hasVertexMarkers(3); - cy.get('.active .action-cancel').click(); + cy.get('.leaflet-geoman-active .action-cancel').click(); cy.hasVertexMarkers(0); }); @@ -393,8 +393,8 @@ describe('Draw & Edit Poly', () => { cy.toolbarButton('polygon') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.window().then(({ map, L }) => { cy.get(mapSelector) @@ -426,7 +426,7 @@ describe('Draw & Edit Poly', () => { }); }); - cy.get('.marker-icon-middle').click({ multiple: true }); + cy.get('.leaflet-geoman-vertex-icon-middle').click({ multiple: true }); cy.get('@poly').then((poly) => { cy.get('@firstLatLng').then((oldFirst) => { @@ -456,8 +456,8 @@ describe('Draw & Edit Poly', () => { // activate polygon drawing cy.toolbarButton('polygon') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // draw a polygon - triggers the event pm:create cy.get(mapSelector) @@ -478,8 +478,8 @@ describe('Draw & Edit Poly', () => { // activate polygon drawing cy.toolbarButton('polygon') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // draw a polygon cy.get(mapSelector) @@ -492,8 +492,8 @@ describe('Draw & Edit Poly', () => { // button should be disabled after successful draw cy.toolbarButton('polygon') - .closest('.button-container') - .should('have.not.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.not.class', 'leaflet-geoman-active'); cy.hasLayers(3); @@ -504,14 +504,16 @@ describe('Draw & Edit Poly', () => { cy.hasMiddleMarkers(5); // press a middle marker - cy.get('.marker-icon-middle').first().click(); + cy.get('.leaflet-geoman-vertex-icon-middle').first().click(); // now there should be one more vertex cy.hasVertexMarkers(6); cy.hasMiddleMarkers(6); // let's remove one vertex and check it - cy.get('.marker-icon:not(.marker-icon-middle)') + cy.get( + '.leaflet-geoman-vertex-icon:not(.leaflet-geoman-vertex-icon-middle)' + ) .last() .trigger('contextmenu'); @@ -519,7 +521,9 @@ describe('Draw & Edit Poly', () => { cy.hasMiddleMarkers(5); // remove all markers - cy.get('.marker-icon:not(.marker-icon-middle)').each(($el, index) => { + cy.get( + '.leaflet-geoman-vertex-icon:not(.leaflet-geoman-vertex-icon-middle)' + ).each(($el, index) => { if (index >= 3) { // the last marker should be removed automatically, so it shouldn't exist cy.wrap($el).should('not.exist'); @@ -534,8 +538,8 @@ describe('Draw & Edit Poly', () => { cy.toolbarButton('edit') .click() - .closest('.button-container') - .should('have.not.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.not.class', 'leaflet-geoman-active'); }); it('fire pm:cut AFTER the actual cut is visible on the map', () => { @@ -579,8 +583,8 @@ describe('Draw & Edit Poly', () => { // activate polygon drawing cy.toolbarButton('polygon') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // draw a polygon cy.get(mapSelector) @@ -594,8 +598,8 @@ describe('Draw & Edit Poly', () => { // activate cutting drawing cy.toolbarButton('cut') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // draw a polygon to cut cy.get(mapSelector) @@ -611,16 +615,16 @@ describe('Draw & Edit Poly', () => { // enable global edit mode cy.toolbarButton('edit') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.hasVertexMarkers(10); cy.hasMiddleMarkers(10); cy.toolbarButton('edit') .click() - .closest('.button-container') - .should('have.not.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.not.class', 'leaflet-geoman-active'); }); it('should handle MultiPolygons', () => { @@ -629,16 +633,16 @@ describe('Draw & Edit Poly', () => { // enable global edit mode cy.toolbarButton('edit') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.hasVertexMarkers(8); cy.hasMiddleMarkers(8); cy.toolbarButton('polyline') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // draw a line cy.get(mapSelector) @@ -651,23 +655,23 @@ describe('Draw & Edit Poly', () => { cy.toolbarButton('edit') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.hasVertexMarkers(13); cy.hasMiddleMarkers(12); cy.toolbarButton('delete') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(650, 100); cy.toolbarButton('edit') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.hasVertexMarkers(5); cy.hasMiddleMarkers(4); @@ -774,8 +778,8 @@ describe('Draw & Edit Poly', () => { // activate line drawing cy.toolbarButton('polyline') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // draw a line cy.get(mapSelector).click(150, 250).click(160, 50).click(160, 50); @@ -1179,7 +1183,9 @@ describe('Draw & Edit Poly', () => { cy.toolbarButton('edit').click(); - cy.get('.marker-icon:not(.marker-icon-middle)').each(($el, index) => { + cy.get( + '.leaflet-geoman-vertex-icon:not(.leaflet-geoman-vertex-icon-middle)' + ).each(($el, index) => { if (index < 2) { // remove first two markers cy.wrap($el).trigger('contextmenu'); @@ -1241,8 +1247,8 @@ describe('Draw & Edit Poly', () => { it('show correct shape for Polygon while drawing', () => { cy.toolbarButton('polygon') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(150, 150).click(450, 150).click(450, 400); @@ -1255,8 +1261,8 @@ describe('Draw & Edit Poly', () => { it('change color of Polygon while drawing', () => { cy.toolbarButton('polygon') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(220, 220); cy.get(mapSelector).click(100, 230); @@ -1332,8 +1338,8 @@ describe('Draw & Edit Poly', () => { // activate polygon drawing cy.toolbarButton('polygon') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // draw a polygon cy.get(mapSelector) @@ -1347,11 +1353,13 @@ describe('Draw & Edit Poly', () => { // enable global edit mode cy.toolbarButton('edit') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // let's remove one vertex - cy.get('.marker-icon:not(.marker-icon-middle)') + cy.get( + '.leaflet-geoman-vertex-icon:not(.leaflet-geoman-vertex-icon-middle)' + ) .last() .trigger('contextmenu'); @@ -1366,8 +1374,8 @@ describe('Draw & Edit Poly', () => { // activate polygon drawing cy.toolbarButton('polygon') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // draw a polygon cy.get(mapSelector) @@ -1379,8 +1387,8 @@ describe('Draw & Edit Poly', () => { // activate cutting drawing cy.toolbarButton('cut') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // draw a polygon to cut cy.get(mapSelector) @@ -1394,8 +1402,8 @@ describe('Draw & Edit Poly', () => { // enable global edit mode cy.toolbarButton('edit') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.hasVertexMarkers(6); @@ -1417,8 +1425,8 @@ describe('Draw & Edit Poly', () => { cy.toolbarButton('polygon') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector) .click(50, 250) @@ -1428,8 +1436,8 @@ describe('Draw & Edit Poly', () => { cy.toolbarButton('polygon') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector) .click(150, 60) diff --git a/cypress/e2e/polyline.cy.js b/cypress/e2e/polyline.cy.js index 5bfbaa28..ccd1a513 100644 --- a/cypress/e2e/polyline.cy.js +++ b/cypress/e2e/polyline.cy.js @@ -33,11 +33,15 @@ describe('Draw & Edit Polyline', () => { cy.hasVertexMarkers(5); - cy.get('.button-container.active .action-removeLastVertex').click(); + cy.get( + '.leaflet-geoman-button-container.leaflet-geoman-active .action-removeLastVertex' + ).click(); cy.hasVertexMarkers(4); - cy.get('.button-container.active .action-removeLastVertex').click(); + cy.get( + '.leaflet-geoman-button-container.leaflet-geoman-active .action-removeLastVertex' + ).click(); cy.hasVertexMarkers(3); cy.window().then(() => { @@ -114,10 +118,10 @@ describe('Draw & Edit Polyline', () => { // activate line drawing cy.toolbarButton('polyline') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); - cy.get(mapSelector).should('have.class', 'geoman-draw-cursor'); + cy.get(mapSelector).should('have.class', 'leaflet-geoman-draw-cursor'); // draw a line cy.get(mapSelector) @@ -127,12 +131,12 @@ describe('Draw & Edit Polyline', () => { .click(250, 250) .click(250, 250); - cy.get(mapSelector).should('not.have.class', 'geoman-draw-cursor'); + cy.get(mapSelector).should('not.have.class', 'leaflet-geoman-draw-cursor'); // button should be disabled after successful draw cy.toolbarButton('polyline') - .closest('.button-container') - .should('have.not.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.not.class', 'leaflet-geoman-active'); cy.hasLayers(3); @@ -143,7 +147,7 @@ describe('Draw & Edit Polyline', () => { cy.hasMiddleMarkers(3); // press a middle marker - cy.get('.marker-icon-middle').first().click(); + cy.get('.leaflet-geoman-vertex-icon-middle').first().click(); // now there should be one more vertex cy.hasVertexMarkers(5); @@ -152,7 +156,9 @@ describe('Draw & Edit Polyline', () => { cy.hasMiddleMarkers(4); // rightclick on a vertex-marker to delete it - cy.get('.marker-icon:not(.marker-icon-middle)') + cy.get( + '.leaflet-geoman-vertex-icon:not(.leaflet-geoman-vertex-icon-middle)' + ) .first() .trigger('contextmenu'); @@ -171,8 +177,8 @@ describe('Draw & Edit Polyline', () => { // activate line drawing cy.toolbarButton('polygon') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // draw a line cy.get(mapSelector) @@ -294,8 +300,8 @@ describe('Draw & Edit Polyline', () => { it('remove line if enabled', () => { cy.toolbarButton('polyline') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(250, 250).click(250, 250); @@ -312,8 +318,8 @@ describe('Draw & Edit Polyline', () => { it('change color of line while drawing', () => { cy.toolbarButton('polyline') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200); cy.get(mapSelector).click(100, 230); @@ -348,7 +354,9 @@ describe('Draw & Edit Polyline', () => { cy.hasMiddleMarkers(3); // rightclick on a vertex-marker to delete it - cy.get('.marker-icon:not(.marker-icon-middle)') + cy.get( + '.leaflet-geoman-vertex-icon:not(.leaflet-geoman-vertex-icon-middle)' + ) .eq(2) .trigger('contextmenu'); @@ -373,8 +381,8 @@ describe('Draw & Edit Polyline', () => { // activate line drawing cy.toolbarButton('polyline') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // draw a line cy.get(mapSelector).click(150, 250); @@ -388,8 +396,8 @@ describe('Draw & Edit Polyline', () => { // activate polyline drawing cy.toolbarButton('polyline') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // draw a polyline cy.get(mapSelector).click(90, 250).click(150, 50).click(150, 50); @@ -397,11 +405,13 @@ describe('Draw & Edit Polyline', () => { // enable global edit mode cy.toolbarButton('edit') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // let's remove one vertex - cy.get('.marker-icon:not(.marker-icon-middle)') + cy.get( + '.leaflet-geoman-vertex-icon:not(.leaflet-geoman-vertex-icon-middle)' + ) .last() .trigger('contextmenu'); @@ -416,8 +426,8 @@ describe('Draw & Edit Polyline', () => { // activate polyline drawing cy.toolbarButton('polyline') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // draw a polyline cy.get(mapSelector).click(90, 250).click(150, 50).click(150, 50); @@ -425,8 +435,8 @@ describe('Draw & Edit Polyline', () => { // activate polyline drawing cy.toolbarButton('polyline') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); // draw a polyline cy.get(mapSelector).click(150, 60).click(250, 50).click(250, 50); diff --git a/cypress/e2e/rectangle.cy.js b/cypress/e2e/rectangle.cy.js index 2b6a5015..71c75d1c 100644 --- a/cypress/e2e/rectangle.cy.js +++ b/cypress/e2e/rectangle.cy.js @@ -4,19 +4,19 @@ describe('Draw Rectangle', () => { it('draws a rectangle', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); - cy.get(mapSelector).should('have.class', 'geoman-draw-cursor'); + cy.get(mapSelector).should('have.class', 'leaflet-geoman-draw-cursor'); cy.get(mapSelector).click(200, 200).click(400, 350); - cy.get(mapSelector).should('not.have.class', 'geoman-draw-cursor'); + cy.get(mapSelector).should('not.have.class', 'leaflet-geoman-draw-cursor'); cy.toolbarButton('edit') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.hasVertexMarkers(4); cy.hasMiddleMarkers(0); @@ -25,8 +25,8 @@ describe('Draw Rectangle', () => { it('properly snaps rectangle edge', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(400, 350); @@ -235,8 +235,8 @@ describe('Draw Rectangle', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(400, 350); @@ -249,8 +249,8 @@ describe('Draw Rectangle', () => { // create snapping layer cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(400, 350); @@ -520,8 +520,8 @@ describe('Draw Rectangle', () => { it('allows only one of two rectangles to be editable', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(400, 350); @@ -531,15 +531,15 @@ describe('Draw Rectangle', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(500, 200).click(400, 350); cy.toolbarButton('edit') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.hasVertexMarkers(4); cy.hasMiddleMarkers(0); @@ -548,8 +548,8 @@ describe('Draw Rectangle', () => { it('allows only one of two rectangles to be rotateable', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(400, 350); @@ -559,15 +559,15 @@ describe('Draw Rectangle', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(500, 200).click(400, 350); cy.toolbarButton('rotate') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.hasVertexMarkers(4); cy.hasMiddleMarkers(0); @@ -903,8 +903,8 @@ describe('Draw Rectangle', () => { it('change color of Rectangle while drawing', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(220, 220); cy.get(mapSelector).trigger('pointermove', 300, 300); @@ -927,8 +927,8 @@ describe('Draw Rectangle', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(220, 220); cy.get(mapSelector).trigger('pointermove', 500, 300); @@ -1004,8 +1004,8 @@ describe('Draw Rectangle', () => { it('on vertex click', (done) => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200); cy.get(mapSelector).click(300, 300); @@ -1030,8 +1030,8 @@ describe('Draw Rectangle', () => { it('prevents drawing rectangle where all corners have the same position', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200); cy.get(mapSelector).click(200, 200); @@ -1048,15 +1048,15 @@ describe('Draw Rectangle', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(90, 250).click(150, 50); cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(150, 60).click(250, 90); diff --git a/cypress/e2e/rotation.cy.js b/cypress/e2e/rotation.cy.js index 58efe1ab..a8943ff7 100644 --- a/cypress/e2e/rotation.cy.js +++ b/cypress/e2e/rotation.cy.js @@ -4,8 +4,8 @@ describe('Rotation', () => { it('check if getAngle is correct', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(400, 350); @@ -30,8 +30,8 @@ describe('Rotation', () => { it('enable / disable Layer Rotate Mode', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(400, 350); @@ -57,8 +57,8 @@ describe('Rotation', () => { it('enable / disable Global Rotate Mode', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(400, 350); @@ -84,8 +84,8 @@ describe('Rotation', () => { cy.toolbarButton('rotate') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.hasVertexMarkers(4); @@ -99,15 +99,15 @@ describe('Rotation', () => { it('check if Markers are updated', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(400, 350); cy.toolbarButton('rotate') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.hasVertexMarkers(4); @@ -130,8 +130,8 @@ describe('Rotation', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(600, 350); @@ -149,8 +149,8 @@ describe('Rotation', () => { it('rotates polygon', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(400, 350); @@ -170,8 +170,8 @@ describe('Rotation', () => { it('rotates multi-polygon', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(600, 350); cy.toolbarButton('cut').click(); @@ -196,8 +196,8 @@ describe('Rotation', () => { it('removes hidden rotatePoly if layer is removed', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(600, 350); cy.window().then(({ map }) => { @@ -252,8 +252,8 @@ describe('Rotation', () => { it('rotateLayerToAngle around arbitrary origins', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(400, 350); @@ -283,8 +283,8 @@ describe('Rotation', () => { it('rotates around arbitrary origins', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(400, 350); @@ -337,8 +337,8 @@ describe('Rotation', () => { it('apply new rotation center while rotation is enabled', () => { cy.toolbarButton('rectangle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(200, 200).click(400, 350); diff --git a/cypress/e2e/text.cy.js b/cypress/e2e/text.cy.js index bf908244..049eaf6f 100644 --- a/cypress/e2e/text.cy.js +++ b/cypress/e2e/text.cy.js @@ -60,14 +60,17 @@ describe('Text Layer', () => { it('place text layer and write text', () => { cy.toolbarButton('text') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); - cy.get(mapSelector).should('have.class', 'geoman-draw-cursor'); + cy.get(mapSelector).should('have.class', 'leaflet-geoman-draw-cursor'); cy.get(mapSelector).click(90, 250); - cy.get(mapSelector).should('not.have.class', 'geoman-draw-cursor'); + cy.get(mapSelector).should( + 'not.have.class', + 'leaflet-geoman-draw-cursor' + ); let textArea; cy.window().then(({ map }) => { @@ -85,15 +88,17 @@ describe('Text Layer', () => { cy.window().then(() => { expect(textArea.readOnly).to.eq(true); - expect(textArea.classList.contains('pm-disabled')).to.eq(true); + expect(textArea.classList.contains('leaflet-geoman-disabled')).to.eq( + true + ); }); }); it('place text layer and remove it because it is empty', () => { cy.toolbarButton('text') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(90, 250); @@ -117,8 +122,8 @@ describe('Text Layer', () => { it('place text layer and remove it with click on control', () => { cy.toolbarButton('text') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(90, 250); @@ -146,8 +151,8 @@ describe('Text Layer', () => { cy.toolbarButton('text') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(90, 250); @@ -167,7 +172,9 @@ describe('Text Layer', () => { cy.window().then(({ map }) => { expect(textArea.readOnly).to.eq(true); - expect(textArea.classList.contains('pm-disabled')).to.eq(true); + expect(textArea.classList.contains('leaflet-geoman-disabled')).to.eq( + true + ); expect(2).to.eq(map.pm.getGeomanDrawLayers().length); const textLayer = map.pm.getGeomanDrawLayers()[1]; textArea = textLayer.pm.getElement(); @@ -192,7 +199,9 @@ describe('Text Layer', () => { cy.window().then(() => { expect(textArea.value).to.eq('Geoman!'); expect(textArea.readOnly).to.eq(true); - expect(textArea.classList.contains('pm-disabled')).to.eq(true); + expect(textArea.classList.contains('leaflet-geoman-disabled')).to.eq( + true + ); }); }); @@ -202,8 +211,8 @@ describe('Text Layer', () => { }); cy.toolbarButton('text') - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(90, 250); @@ -223,15 +232,17 @@ describe('Text Layer', () => { cy.window().then(() => { expect(textArea.readOnly).to.eq(true); - expect(textArea.classList.contains('pm-disabled')).to.eq(true); + expect(textArea.classList.contains('leaflet-geoman-disabled')).to.eq( + true + ); }); }); it('resizes the textbox while typing', () => { cy.toolbarButton('text') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(90, 250); @@ -255,8 +266,8 @@ describe('Text Layer', () => { it('allows to edit the Text multiple times', () => { cy.toolbarButton('text') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(90, 250); @@ -299,8 +310,8 @@ describe('Text Layer', () => { }); cy.toolbarButton('text') - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(90, 250); @@ -327,8 +338,8 @@ describe('Text Layer', () => { }); cy.toolbarButton('text') - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(90, 250); @@ -338,7 +349,9 @@ describe('Text Layer', () => { const textLayer = map.pm.getGeomanDrawLayers()[0]; textArea = textLayer.pm.getElement(); expect(textArea.readOnly).to.eq(true); - expect(textArea.classList.contains('pm-disabled')).to.eq(true); + expect(textArea.classList.contains('leaflet-geoman-disabled')).to.eq( + true + ); }); cy.get(mapSelector).click(90, 280); @@ -351,8 +364,8 @@ describe('Text Layer', () => { }); cy.toolbarButton('text') - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(90, 250); @@ -378,8 +391,8 @@ describe('Text Layer', () => { }); cy.toolbarButton('text') - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.get(mapSelector).click(90, 250); @@ -411,7 +424,9 @@ describe('Text Layer', () => { cy.window().then(() => { expect(textArea.readOnly).to.eq(false); - expect(textArea.classList.contains('pm-disabled')).to.eq(false); + expect(textArea.classList.contains('leaflet-geoman-disabled')).to.eq( + false + ); cy.get(textArea).type('. Hello World'); }); @@ -424,7 +439,9 @@ describe('Text Layer', () => { cy.window().then(() => { textLayer.pm.disable(); expect(textArea.readOnly).to.eq(true); - expect(textArea.classList.contains('pm-disabled')).to.eq(true); + expect(textArea.classList.contains('leaflet-geoman-disabled')).to.eq( + true + ); }); }); it('blur()', () => { @@ -442,13 +459,17 @@ describe('Text Layer', () => { cy.window().then(() => { expect(textArea.readOnly).to.eq(false); - expect(textArea.classList.contains('pm-disabled')).to.eq(false); + expect(textArea.classList.contains('leaflet-geoman-disabled')).to.eq( + false + ); textLayer.pm.blur(); expect(textLayer.pm.hasFocus()).to.eq(false); textLayer.pm.disable(); expect(textArea.readOnly).to.eq(true); - expect(textArea.classList.contains('pm-disabled')).to.eq(true); + expect(textArea.classList.contains('leaflet-geoman-disabled')).to.eq( + true + ); }); }); it('hasFocus', () => { @@ -466,14 +487,18 @@ describe('Text Layer', () => { cy.window().then(() => { expect(textArea.readOnly).to.eq(false); - expect(textArea.classList.contains('pm-disabled')).to.eq(false); + expect(textArea.classList.contains('leaflet-geoman-disabled')).to.eq( + false + ); expect(textLayer.pm.hasFocus()).to.eq(true); textLayer.pm.blur(); expect(textLayer.pm.hasFocus()).to.eq(false); textLayer.pm.disable(); expect(textArea.readOnly).to.eq(true); - expect(textArea.classList.contains('pm-disabled')).to.eq(true); + expect(textArea.classList.contains('leaflet-geoman-disabled')).to.eq( + true + ); }); }); it('getElement', () => { diff --git a/cypress/e2e/toolbar.cy.js b/cypress/e2e/toolbar.cy.js index a4dc7340..a41edead 100644 --- a/cypress/e2e/toolbar.cy.js +++ b/cypress/e2e/toolbar.cy.js @@ -2,7 +2,7 @@ describe('Testing the Toolbar', () => { const mapSelector = '#map'; it('Repositions The Toolbar', () => { - cy.get('.leaflet-pm-toolbar') + cy.get('.leaflet-geoman-toolbar') .parent('.leaflet-top.leaflet-left') .should('exist'); @@ -14,15 +14,17 @@ describe('Testing the Toolbar', () => { cy.toolbarButton('polygon').click(); - cy.get('.leaflet-pm-actions-container') + cy.get('.leaflet-geoman-actions-container') .should('have.css', 'right') .and('match', /100%/); - cy.get('.leaflet-pm-toolbar') + cy.get('.leaflet-geoman-toolbar') .parent('.leaflet-top.leaflet-right') .should('exist'); - cy.get('.button-container.active .action-cancel').click(); + cy.get( + '.leaflet-geoman-button-container.leaflet-geoman-active .action-cancel' + ).click(); cy.window().then(({ map }) => { map.pm.addControls({ @@ -30,7 +32,7 @@ describe('Testing the Toolbar', () => { }); }); - cy.get('.leaflet-pm-toolbar') + cy.get('.leaflet-geoman-toolbar') .parent('.leaflet-bottom.leaflet-right') .should('exist'); @@ -40,7 +42,7 @@ describe('Testing the Toolbar', () => { }); }); - cy.get('.leaflet-pm-toolbar') + cy.get('.leaflet-geoman-toolbar') .parent('.leaflet-bottom.leaflet-left') .should('exist'); @@ -54,17 +56,17 @@ describe('Testing the Toolbar', () => { it('Handles Button States', () => { cy.toolbarButton('edit') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.toolbarButton('marker') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.toolbarButton('edit') - .closest('.button-container') - .should('have.not.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.not.class', 'leaflet-geoman-active'); cy.toolbarButton('polyline').click(); cy.toolbarButton('polygon').click(); @@ -77,21 +79,21 @@ describe('Testing the Toolbar', () => { cy.toolbarButton('circle').click(); cy.toolbarButton('circle') .click() - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.toolbarButton('edit') - .closest('.button-container') - .should('have.not.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.not.class', 'leaflet-geoman-active'); cy.toolbarButton('polyline') - .closest('.button-container') - .should('have.not.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.not.class', 'leaflet-geoman-active'); cy.toolbarButton('delete') - .closest('.button-container') - .should('have.not.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.not.class', 'leaflet-geoman-active'); cy.toolbarButton('rectangle') - .closest('.button-container') - .should('have.not.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.not.class', 'leaflet-geoman-active'); }); it('Reacts to programmatic state change', () => { @@ -100,19 +102,19 @@ describe('Testing the Toolbar', () => { }); cy.toolbarButton('edit') - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.window().then(({ map }) => { map.pm.toggleGlobalRemovalMode(); }); cy.toolbarButton('edit') - .closest('.button-container') - .should('have.not.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.not.class', 'leaflet-geoman-active'); cy.toolbarButton('delete') - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.window().then(({ map }) => { map.pm.toggleGlobalRemovalMode(); @@ -121,8 +123,8 @@ describe('Testing the Toolbar', () => { }); cy.toolbarButton('delete') - .closest('.button-container') - .should('have.not.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.not.class', 'leaflet-geoman-active'); cy.window().then(({ map }) => { map.pm.toggleGlobalEditMode(); @@ -132,16 +134,16 @@ describe('Testing the Toolbar', () => { }); cy.toolbarButton('delete') - .closest('.button-container') - .should('have.not.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.not.class', 'leaflet-geoman-active'); cy.toolbarButton('edit') - .closest('.button-container') - .should('have.not.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.not.class', 'leaflet-geoman-active'); cy.toolbarButton('marker') - .closest('.button-container') - .should('have.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active'); cy.toolbarButton('marker').click(); }); @@ -151,7 +153,9 @@ describe('Testing the Toolbar', () => { map.pm.setLang('es'); }); - cy.get('.leaflet-buttons-control-button .leaflet-pm-icon-circle-marker') + cy.get( + '.leaflet-geoman-buttons-control-button .leaflet-geoman-icon-circle-marker' + ) .parent() .parent() .should('have.attr', 'title') @@ -161,11 +165,17 @@ describe('Testing the Toolbar', () => { it('has functioning actions', () => { cy.toolbarButton('polygon').click(); - cy.get('.button-container.active .action-cancel').should('exist'); + cy.get( + '.leaflet-geoman-button-container.leaflet-geoman-active .action-cancel' + ).should('exist'); - cy.get('.button-container.active .action-cancel').click(); + cy.get( + '.leaflet-geoman-button-container.leaflet-geoman-active .action-cancel' + ).click(); - cy.get('.button-container.active .action-cancel').should('not.exist'); + cy.get( + '.leaflet-geoman-button-container.leaflet-geoman-active .action-cancel' + ).should('not.exist'); cy.toolbarButton('polygon').click(); @@ -178,7 +188,9 @@ describe('Testing the Toolbar', () => { cy.hasVertexMarkers(6); - cy.get('.button-container.active .action-finish').click(); + cy.get( + '.leaflet-geoman-button-container.leaflet-geoman-active .action-finish' + ).click(); cy.hasVertexMarkers(0); @@ -186,13 +198,15 @@ describe('Testing the Toolbar', () => { cy.hasVertexMarkers(5); - cy.get('.button-container.active .action-finishMode').click(); + cy.get( + '.leaflet-geoman-button-container.leaflet-geoman-active .action-finishMode' + ).click(); cy.hasVertexMarkers(0); }); it('Custom Controls - new button', () => { - cy.get('.leaflet-pm-toolbar') + cy.get('.leaflet-geoman-toolbar') .parent('.leaflet-top.leaflet-left') .should('exist'); @@ -203,7 +217,7 @@ describe('Testing the Toolbar', () => { map.pm.Toolbar.createCustomControl({ name: 'clickButton', block: 'custom', - className: 'leaflet-pm-icon-marker', + className: 'leaflet-geoman-icon-marker', title: 'Count layers', onClick: () => { testresult = 'clickButton clicked'; @@ -216,7 +230,7 @@ describe('Testing the Toolbar', () => { .and('include', 'Count layers'); container[0].children[0].click(); // button expect(testresult).to.equal('clickButton clicked'); - cy.get(container).should('not.have.class', 'active'); + cy.get(container).should('not.have.class', 'leaflet-geoman-active'); }); expect(map.pm.Toolbar.getButton('clickButton')).to.not.equal(undefined); expect(map.pm.Toolbar.controlExists('clickButton')).to.equal(true); @@ -227,7 +241,7 @@ describe('Testing the Toolbar', () => { }); it('Custom Controls - new draw instance', () => { - cy.get('.leaflet-pm-toolbar') + cy.get('.leaflet-geoman-toolbar') .parent('.leaflet-top.leaflet-left') .should('exist'); @@ -249,7 +263,7 @@ describe('Testing the Toolbar', () => { map.pm.Toolbar.copyDrawControl('Polygon', { name: 'PolygonCopy', block: 'custom', - className: 'leaflet-pm-icon-polygon', + className: 'leaflet-geoman-icon-polygon', title: 'Display text on hover button', actions, }); @@ -260,7 +274,7 @@ describe('Testing the Toolbar', () => { .should('have.attr', 'title') .and('include', 'Display text on hover button'); cy.get(container[0].children[0]).click(); // button - cy.get(container).should('have.class', 'active'); + cy.get(container).should('have.class', 'leaflet-geoman-active'); const buttonActions = container[0].children[1].children; const actioncount = buttonActions.length; expect(actioncount).to.equal(3); @@ -275,7 +289,7 @@ describe('Testing the Toolbar', () => { }); cy.get(buttonActions[0]).click(); - cy.get(container).should('not.have.class', 'active'); + cy.get(container).should('not.have.class', 'leaflet-geoman-active'); cy.window().then(() => { map.pm.enableDraw('PolygonCopy'); map.on('pm:create', (e) => { @@ -285,7 +299,7 @@ describe('Testing the Toolbar', () => { }); }); }); - cy.get(container).should('have.class', 'active'); + cy.get(container).should('have.class', 'leaflet-geoman-active'); // draw a polygon cy.get(mapSelector) .click(450, 100) @@ -308,26 +322,28 @@ describe('Testing the Toolbar', () => { cy.window().then(({ map }) => { map.pm.removeControls(); }); - cy.get('.leaflet-pm-toolbar').should('not.exist'); + cy.get('.leaflet-geoman-toolbar').should('not.exist'); cy.window().then(({ map }) => { map.pm.Toolbar.copyDrawControl('Polygon', { name: 'PolygonCopy' }); }); - cy.get('.leaflet-pm-toolbar').should('not.exist'); + cy.get('.leaflet-geoman-toolbar').should('not.exist'); }); it('Custom Controls - Custom order', () => { cy.window().then(({ map }) => { map.pm.Toolbar.changeControlOrder(['Rectangle']); - cy.get('.leaflet-pm-toolbar.leaflet-pm-draw').then((container) => { - cy.get(container[0].children[0]).then((e) => { - cy.get(e[0].children[0].children[0]).should( - 'have.class', - 'leaflet-pm-icon-rectangle' - ); - }); - }); + cy.get('.leaflet-geoman-toolbar.leaflet-geoman-draw').then( + (container) => { + cy.get(container[0].children[0]).then((e) => { + cy.get(e[0].children[0].children[0]).should( + 'have.class', + 'leaflet-geoman-icon-rectangle' + ); + }); + } + ); }); }); @@ -336,9 +352,13 @@ describe('Testing the Toolbar', () => { map.pm.addControls({ oneBlock: true, }); - cy.get('.leaflet-pm-toolbar.leaflet-pm-topleft').then((container) => { - expect(container[0].children.length).to.equal(ONE_BLOCK_CONTROL_COUNT); - }); + cy.get('.leaflet-geoman-toolbar.leaflet-geoman-topleft').then( + (container) => { + expect(container[0].children.length).to.equal( + ONE_BLOCK_CONTROL_COUNT + ); + } + ); }); }); @@ -350,10 +370,10 @@ describe('Testing the Toolbar', () => { edit: 'topleft', }, }); - cy.get('.leaflet-pm-toolbar.leaflet-pm-edit') + cy.get('.leaflet-geoman-toolbar.leaflet-geoman-edit') .parent('.leaflet-top.leaflet-left') .should('exist'); - cy.get('.leaflet-pm-toolbar.leaflet-pm-draw') + cy.get('.leaflet-geoman-toolbar.leaflet-geoman-draw') .parent('.leaflet-top.leaflet-right') .should('exist'); }); @@ -378,19 +398,23 @@ describe('Testing the Toolbar', () => { map.pm.Toolbar.copyDrawControl('Polygon', { name: 'PolygonCopy', block: 'custom', - className: 'leaflet-pm-icon-polygon', + className: 'leaflet-geoman-icon-polygon', title: 'Display text on hover button', }); - cy.get('.leaflet-pm-toolbar.leaflet-pm-topright').then((container) => { - expect(container[0].children.length).to.equal( - TOP_RIGHT_BLOCK_CONTROL_COUNT - ); - }); - cy.get('.leaflet-pm-toolbar.leaflet-pm-topleft').then((container) => { - expect(container[0].children.length).to.equal( - TOP_LEFT_BLOCK_CONTROL_COUNT - ); - }); + cy.get('.leaflet-geoman-toolbar.leaflet-geoman-topright').then( + (container) => { + expect(container[0].children.length).to.equal( + TOP_RIGHT_BLOCK_CONTROL_COUNT + ); + } + ); + cy.get('.leaflet-geoman-toolbar.leaflet-geoman-topleft').then( + (container) => { + expect(container[0].children.length).to.equal( + TOP_LEFT_BLOCK_CONTROL_COUNT + ); + } + ); } ); }); @@ -411,7 +435,9 @@ describe('Testing the Toolbar', () => { expect(eventFired).to.equal('drawPolygon'); }); - cy.get('.button-container.active .action-cancel').click(); + cy.get( + '.leaflet-geoman-button-container.leaflet-geoman-active .action-cancel' + ).click(); cy.window().then(() => { expect(eventFired).to.equal('Cancel'); @@ -444,8 +470,8 @@ describe('Testing the Toolbar', () => { cy.toolbarButton('polygon') .click() - .closest('.button-container') - .should('have.class', 'active') + .closest('.leaflet-geoman-button-container') + .should('have.class', 'leaflet-geoman-active') .then(() => { expect(eventFired).to.equal('drawPolygon'); eventFired = ''; @@ -456,8 +482,8 @@ describe('Testing the Toolbar', () => { cy.window().then(() => { expect(eventFired).to.not.equal('drawPolygon'); cy.toolbarButton('polygon') - .closest('.button-container') - .should('have.not.class', 'active'); + .closest('.leaflet-geoman-button-container') + .should('have.not.class', 'leaflet-geoman-active'); }); }); @@ -476,7 +502,7 @@ describe('Testing the Toolbar', () => { // add leaflet-geoman toolbar map.pm.addControls(); - cy.get('.leaflet-pm-toolbar') + cy.get('.leaflet-geoman-toolbar') .parent('.leaflet-top.leaflet-left') .should('exist'); }); diff --git a/cypress/e2e/tooltips.cy.js b/cypress/e2e/tooltips.cy.js index 24d0a981..022dbdbe 100644 --- a/cypress/e2e/tooltips.cy.js +++ b/cypress/e2e/tooltips.cy.js @@ -169,13 +169,13 @@ describe('Shows Tooltips', () => { cy.toolbarButton('polygon').click(); cy.get('.leaflet-tooltip-bottom').should('not.exist'); - cy.get('.active .action-cancel').click(); + cy.get('.leaflet-geoman-active .action-cancel').click(); cy.window().then(({ map }) => { map.pm.enableDraw('Polygon'); }); cy.get('.leaflet-tooltip-bottom').should('not.exist'); - cy.get('.active .action-cancel').click(); + cy.get('.leaflet-geoman-active .action-cancel').click(); cy.window().then(({ map }) => { map.pm.enableDraw('Polygon', { diff --git a/cypress/support/commands.js b/cypress/support/commands.js index d5c71a59..3ddaccf4 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -93,25 +93,27 @@ Cypress.Commands.add('testLayerAdditionPerformance', () => { }); Cypress.Commands.add('hasMiddleMarkers', (count) => { - cy.get('.marker-icon-middle').should(($p) => { + cy.get('.leaflet-geoman-vertex-icon-middle').should(($p) => { expect($p).to.have.length(count); }); }); Cypress.Commands.add('hasVertexMarkers', (count) => { - cy.get('.marker-icon:not(.marker-icon-middle)').should(($p) => { + cy.get( + '.leaflet-geoman-vertex-icon:not(.leaflet-geoman-vertex-icon-middle)' + ).should(($p) => { expect($p).to.have.length(count); }); }); Cypress.Commands.add('hasTotalVertexMarkers', (count) => { - cy.get('.marker-icon').should(($p) => { + cy.get('.leaflet-geoman-vertex-icon').should(($p) => { expect($p).to.have.length(count); }); }); Cypress.Commands.add('toolbarButton', (name) => - cy.get(`.leaflet-pm-icon-${name}`) + cy.get(`.leaflet-geoman-icon-${name}`) ); Cypress.Commands.add('toolbarButtonContainer', (name, map) => { diff --git a/demo/customcontrols.js b/demo/customcontrols.js index 7a40a9a3..277b0d3b 100644 --- a/demo/customcontrols.js +++ b/demo/customcontrols.js @@ -24,7 +24,7 @@ map.pm.addControls({ map.pm.Toolbar.createCustomControl({ name: 'alertBox', block: 'custom', - className: 'leaflet-pm-icon-marker xyz-class', + className: 'leaflet-geoman-icon-marker xyz-class', title: 'Count layers', onClick: () => { alert(`There are ${Geoman.Utils.findLayers(map).length} layers on the map`); diff --git a/src/css/controls.css b/src/css/controls.css index dadde1c5..c0da9ba4 100644 --- a/src/css/controls.css +++ b/src/css/controls.css @@ -1,52 +1,51 @@ -.leaflet-pm-toolbar { -} - -.leaflet-pm-toolbar .leaflet-buttons-control-button { +.leaflet-geoman-toolbar .leaflet-geoman-buttons-control-button { padding: 5px; box-sizing: border-box; position: relative; z-index: 3; } -.leaflet-pm-toolbar - .leaflet-pm-actions-container - a.leaflet-pm-action:first-child:not(.pos-right), -.leaflet-pm-toolbar - .leaflet-pm-actions-container - a.leaflet-pm-action:last-child.pos-right { +.leaflet-geoman-toolbar + .leaflet-geoman-actions-container + a.leaflet-geoman-action:first-child:not(.leaflet-geoman-pos-right), +.leaflet-geoman-toolbar + .leaflet-geoman-actions-container + a.leaflet-geoman-action:last-child.leaflet-geoman-pos-right { border-radius: 0; } -.leaflet-pm-toolbar .button-container a.leaflet-buttons-control-button { +.leaflet-geoman-toolbar + .leaflet-geoman-button-container + a.leaflet-geoman-buttons-control-button { border-radius: 0; } -.leaflet-pm-toolbar - .button-container:last-child - a.leaflet-buttons-control-button { +.leaflet-geoman-toolbar + .leaflet-geoman-button-container:last-child + a.leaflet-geoman-buttons-control-button { border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; } -.leaflet-pm-toolbar - .button-container:first-child - a.leaflet-buttons-control-button { +.leaflet-geoman-toolbar + .leaflet-geoman-button-container:first-child + a.leaflet-geoman-buttons-control-button { border-top-left-radius: 2px; border-top-right-radius: 2px; } -.leaflet-pm-toolbar - .button-container:last-child - a.leaflet-buttons-control-button { +.leaflet-geoman-toolbar + .leaflet-geoman-button-container:last-child + a.leaflet-geoman-buttons-control-button { border-bottom: none; } -.leaflet-pm-toolbar .control-fa-icon { +.leaflet-geoman-toolbar .control-fa-icon { font-size: 19px; line-height: 24px; } -.leaflet-pm-toolbar .control-icon { +.leaflet-geoman-toolbar .leaflet-geoman-control-icon { width: 100%; height: 100%; box-sizing: border-box; @@ -55,64 +54,60 @@ background-position: center center; } -.leaflet-pm-toolbar .leaflet-pm-icon-marker { +.leaflet-geoman-toolbar .leaflet-geoman-icon-marker { background-image: url('../assets/icons/Marker.svg'); } -.leaflet-pm-toolbar .leaflet-pm-icon-polygon { +.leaflet-geoman-toolbar .leaflet-geoman-icon-polygon { background-image: url('../assets/icons/Polygon.svg'); } -.leaflet-pm-toolbar .leaflet-pm-icon-polyline { +.leaflet-geoman-toolbar .leaflet-geoman-icon-polyline { background-image: url('../assets/icons/Polyline.svg'); } -.leaflet-pm-toolbar .leaflet-pm-icon-circle { +.leaflet-geoman-toolbar .leaflet-geoman-icon-circle { background-image: url('../assets/icons/Circle.svg'); } -.leaflet-pm-toolbar .leaflet-pm-icon-circle-marker { +.leaflet-geoman-toolbar .leaflet-geoman-icon-circle-marker { background-image: url('../assets/icons/CircleMarker.svg'); } -.leaflet-pm-toolbar .leaflet-pm-icon-rectangle { +.leaflet-geoman-toolbar .leaflet-geoman-icon-rectangle { background-image: url('../assets/icons/Rectangle.svg'); } -.leaflet-pm-toolbar .leaflet-pm-icon-delete { +.leaflet-geoman-toolbar .leaflet-geoman-icon-delete { background-image: url('../assets/icons/Eraser.svg'); } -.leaflet-pm-toolbar .leaflet-pm-icon-edit { +.leaflet-geoman-toolbar .leaflet-geoman-icon-edit { background-image: url('../assets/icons/Edit_Vertex.svg'); } -.leaflet-pm-toolbar .leaflet-pm-icon-drag { +.leaflet-geoman-toolbar .leaflet-geoman-icon-drag { background-image: url('../assets/icons/Move.svg'); } -.leaflet-pm-toolbar .leaflet-pm-icon-cut { +.leaflet-geoman-toolbar .leaflet-geoman-icon-cut { background-image: url('../assets/icons/Scissors.svg'); } -.leaflet-pm-toolbar .leaflet-pm-icon-snapping { +.leaflet-geoman-toolbar .leaflet-geoman-icon-snapping { background-image: url('../assets/icons/Magnet.svg'); } -.leaflet-pm-toolbar .leaflet-pm-icon-rotate { +.leaflet-geoman-toolbar .leaflet-geoman-icon-rotate { background-image: url('../assets/icons/Rotate.svg'); } -.leaflet-pm-toolbar .leaflet-pm-icon-text { +.leaflet-geoman-toolbar .leaflet-geoman-icon-text { background-image: url('../assets/icons/Text.svg'); } -.leaflet-buttons-control-button:hover, -.leaflet-buttons-control-button:focus { +.leaflet-geoman-buttons-control-button:hover, +.leaflet-geoman-buttons-control-button:focus { cursor: pointer; background-color: #f4f4f4; } -.active > .leaflet-buttons-control-button { +.leaflet-geoman-active > .leaflet-geoman-buttons-control-button { box-shadow: inset 0 -1px 5px 2px rgba(81, 77, 77, 0.31); } -.leaflet-buttons-control-text-hide { - display: none; -} - -.button-container { +.leaflet-geoman-button-container { position: relative; } -.button-container .leaflet-pm-actions-container { +.leaflet-geoman-button-container .leaflet-geoman-actions-container { z-index: 2; position: absolute; top: 0; @@ -123,34 +118,37 @@ } .leaflet-right - .leaflet-pm-toolbar - .button-container - .leaflet-pm-actions-container { + .leaflet-geoman-toolbar + .leaflet-geoman-button-container + .leaflet-geoman-actions-container { right: 100%; left: auto; } -.button-container.active .leaflet-pm-actions-container { +.leaflet-geoman-button-container.leaflet-geoman-active + .leaflet-geoman-actions-container { display: block; } -.button-container - .leaflet-pm-actions-container:not(.pos-right) - a.leaflet-pm-action:last-child { +.leaflet-geoman-button-container + .leaflet-geoman-actions-container:not(.leaflet-geoman-pos-right) + a.leaflet-geoman-action:last-child { border-radius: 0 3px 3px 0; border-right: 0; } -.button-container - .leaflet-pm-actions-container.pos-right - a.leaflet-pm-action:first-child { +.leaflet-geoman-button-container + .leaflet-geoman-actions-container.leaflet-geoman-pos-right + a.leaflet-geoman-action:first-child { border-radius: 3px 0 0 3px; } -.button-container - .leaflet-pm-actions-container.pos-right - a.leaflet-pm-action:last-child { +.leaflet-geoman-button-container + .leaflet-geoman-actions-container.leaflet-geoman-pos-right + a.leaflet-geoman-action:last-child { border-right: 0; } -.button-container .leaflet-pm-actions-container .leaflet-pm-action { +.leaflet-geoman-button-container + .leaflet-geoman-actions-container + .leaflet-geoman-action { padding: 0 10px; background-color: #666; color: #fff; @@ -163,44 +161,51 @@ line-height: 29px; vertical-align: middle; } -.leaflet-pm-toolbar - .button-container:first-child.pos-right.active - a.leaflet-buttons-control-button { +.leaflet-geoman-toolbar + .leaflet-geoman-button-container:first-child.leaflet-geoman-pos-right.leaflet-geoman-active + a.leaflet-geoman-buttons-control-button { border-top-left-radius: 0; } -.leaflet-pm-toolbar - .button-container:first-child.active:not(.pos-right) - a.leaflet-buttons-control-button { +.leaflet-geoman-toolbar + .leaflet-geoman-button-container:first-child.leaflet-geoman-active:not( + .leaflet-geoman-pos-right + ) + a.leaflet-geoman-buttons-control-button { border-top-right-radius: 0; } -.button-container .leaflet-pm-actions-container .leaflet-pm-action:hover, -.button-container .leaflet-pm-actions-container .leaflet-pm-action:focus { +.leaflet-geoman-button-container + .leaflet-geoman-actions-container + .leaflet-geoman-action:hover, +.leaflet-geoman-button-container + .leaflet-geoman-actions-container + .leaflet-geoman-action:focus { cursor: pointer; background-color: #777; } -.button-container - .leaflet-pm-actions-container - .leaflet-pm-action.active-action { +.leaflet-geoman-button-container + .leaflet-geoman-actions-container + .leaflet-geoman-action.leaflet-geoman-active-action { background-color: #8e8e8e; } /* That the active control is always over the other controls */ -.leaflet-pm-toolbar.activeChild { +.leaflet-geoman-toolbar.leaflet-geoman-active-child { z-index: 801; } -.leaflet-buttons-control-button.pm-disabled { +.leaflet-geoman-buttons-control-button.leaflet-geoman-disabled { background-color: #f4f4f4; } -.leaflet-buttons-control-button.pm-disabled > .control-icon { +.leaflet-geoman-buttons-control-button.leaflet-geoman-disabled + > .leaflet-geoman-control-icon { filter: opacity(0.6); } -.button-container - .leaflet-pm-actions-container - .pm-action-button-mode.control-icon { +.leaflet-geoman-button-container + .leaflet-geoman-actions-container + .leaflet-geoman-action-button-mode.leaflet-geoman-control-icon { filter: brightness(0) invert(1); width: 18px; } diff --git a/src/css/layers.css b/src/css/layers.css index 7d878e99..bb9bd00e 100644 --- a/src/css/layers.css +++ b/src/css/layers.css @@ -1,4 +1,4 @@ -.marker-icon { +.leaflet-geoman-vertex-icon { background-color: #ffffff; border: 1px solid #3388ff; border-radius: 50%; @@ -9,54 +9,54 @@ transition: opacity ease 0.3s; } -.marker-icon-middle { +.leaflet-geoman-vertex-icon-middle { opacity: 0.7; margin: -6px 0 0 -6px !important; width: 10px !important; height: 10px !important; } -.leaflet-pm-draggable { +.leaflet-geoman-draggable { cursor: move !important; } -.cursor-marker { +.leaflet-geoman-cursor-marker { cursor: crosshair; pointer-events: none; opacity: 0; } -.cursor-marker.visible { +.leaflet-geoman-cursor-marker.leaflet-geoman-visible { opacity: 1 !important; } -.geoman-draw-cursor { +.leaflet-geoman-draw-cursor { cursor: crosshair; } -.geoman-draw-cursor .leaflet-interactive { +.leaflet-geoman-draw-cursor .leaflet-interactive { cursor: crosshair; } -.rect-style-marker, -.rect-start-marker { +.leaflet-geoman-rect-style-marker, +.leaflet-geoman-rect-start-marker { opacity: 0; } -.rect-style-marker.visible, -.rect-start-marker.visible { +.leaflet-geoman-rect-style-marker.leaflet-geoman-visible, +.leaflet-geoman-rect-start-marker.leaflet-geoman-visible { opacity: 1 !important; } -.vertexmarker-disabled { +.leaflet-geoman-vertex-disabled { opacity: 0.7; } -.pm-text-marker { +.leaflet-geoman-text-marker { width: 0; height: 0; } -.pm-textarea { +.leaflet-geoman-textarea { box-sizing: content-box; background-color: #fff; color: #000; @@ -70,23 +70,23 @@ padding-top: 4px; } -.leaflet-pm-draggable .pm-textarea { +.leaflet-geoman-draggable .leaflet-geoman-textarea { cursor: move; } -.pm-textarea:focus, -.pm-textarea:focus-within, -.pm-textarea:focus-visible, -.pm-textarea:active { +.leaflet-geoman-textarea:focus, +.leaflet-geoman-textarea:focus-within, +.leaflet-geoman-textarea:focus-visible, +.leaflet-geoman-textarea:active { border: 2px solid #000; outline: 0; } -.pm-textarea.pm-disabled { +.leaflet-geoman-textarea.leaflet-geoman-disabled { border: none; user-select: none; } -.pm-textarea.pm-hasfocus { +.leaflet-geoman-textarea.leaflet-geoman-hasfocus { cursor: auto; } diff --git a/src/js/Draw/L.PM.Draw.CircleMarker.js b/src/js/Draw/L.PM.Draw.CircleMarker.js index 5494e644..f480cdcd 100644 --- a/src/js/Draw/L.PM.Draw.CircleMarker.js +++ b/src/js/Draw/L.PM.Draw.CircleMarker.js @@ -38,7 +38,7 @@ export default class GeomanDrawCircleMarker extends Draw { this._map.pm.Toolbar.toggleButton(this.toolbarButtonName, true); // change map cursor - this._map.getContainer().classList.add('geoman-draw-cursor'); + this._map.getContainer().classList.add('leaflet-geoman-draw-cursor'); // Draw the CircleMarker like a Circle if (this.options[this._editableOption]) { @@ -62,7 +62,7 @@ export default class GeomanDrawCircleMarker extends Draw { // this is the marker in the center of the circle this._centerMarker = new Marker(this._map.getCenter(), { - icon: new DivIcon({ className: 'marker-icon' }), + icon: new DivIcon({ className: 'leaflet-geoman-vertex-icon' }), draggable: false, zIndexOffset: 100, }); @@ -72,7 +72,9 @@ export default class GeomanDrawCircleMarker extends Draw { // this is the hintmarker on the pointer cursor this._hintMarker = new Marker(this._map.getCenter(), { zIndexOffset: 110, - icon: new DivIcon({ className: 'marker-icon cursor-marker' }), + icon: new DivIcon({ + className: 'leaflet-geoman-vertex-icon leaflet-geoman-cursor-marker', + }), }); this._setPane(this._hintMarker, 'vertexPane'); this._hintMarker._pmTempLayer = true; @@ -80,7 +82,7 @@ export default class GeomanDrawCircleMarker extends Draw { // show the hintmarker if the option is set if (this.options.cursorMarker) { - this._hintMarker._icon.classList.add('visible'); + this._hintMarker._icon.classList.add('leaflet-geoman-visible'); } // add tooltip to hintmarker @@ -169,7 +171,7 @@ export default class GeomanDrawCircleMarker extends Draw { this._enabled = false; // reset cursor - this._map.getContainer().classList.remove('geoman-draw-cursor'); + this._map.getContainer().classList.remove('leaflet-geoman-draw-cursor'); // disable when drawing like a Circle if (this.options[this._editableOption]) { diff --git a/src/js/Draw/L.PM.Draw.Marker.js b/src/js/Draw/L.PM.Draw.Marker.js index 814d8498..0d624882 100644 --- a/src/js/Draw/L.PM.Draw.Marker.js +++ b/src/js/Draw/L.PM.Draw.Marker.js @@ -20,7 +20,7 @@ export default class GeomanDrawMarker extends Draw { this._enabled = true; // change map cursor - this._map.getContainer().classList.add('geoman-draw-cursor'); + this._map.getContainer().classList.add('leaflet-geoman-draw-cursor'); // create a marker on click on the map this._map.on('click', this._createMarker, this); @@ -80,7 +80,7 @@ export default class GeomanDrawMarker extends Draw { this._enabled = false; // reset cursor - this._map.getContainer().classList.remove('geoman-draw-cursor'); + this._map.getContainer().classList.remove('leaflet-geoman-draw-cursor'); // undbind click event, don't create a marker on click anymore this._map.off('click', this._createMarker, this); diff --git a/src/js/Draw/L.PM.Draw.Polygon.js b/src/js/Draw/L.PM.Draw.Polygon.js index 200ef3c3..158f4362 100644 --- a/src/js/Draw/L.PM.Draw.Polygon.js +++ b/src/js/Draw/L.PM.Draw.Polygon.js @@ -20,7 +20,7 @@ export default class GeomanDrawPolygon extends GeomanDrawLine { // create the new marker const marker = new Marker(latlng, { draggable: false, - icon: new DivIcon({ className: 'marker-icon' }), + icon: new DivIcon({ className: 'leaflet-geoman-vertex-icon' }), }); this._setPane(marker, 'vertexPane'); diff --git a/src/js/Draw/L.PM.Draw.Polyline.js b/src/js/Draw/L.PM.Draw.Polyline.js index 1d1c047b..5ca1acbd 100644 --- a/src/js/Draw/L.PM.Draw.Polyline.js +++ b/src/js/Draw/L.PM.Draw.Polyline.js @@ -45,7 +45,9 @@ export default class GeomanDrawPolyline extends Draw { this._hintMarker = new Marker(this._map.getCenter(), { interactive: false, // always vertex marker below will be triggered from the click event -> _finishShape #911 zIndexOffset: 100, - icon: new DivIcon({ className: 'marker-icon cursor-marker' }), + icon: new DivIcon({ + className: 'leaflet-geoman-vertex-icon leaflet-geoman-cursor-marker', + }), }); this._setPane(this._hintMarker, 'vertexPane'); this._hintMarker._pmTempLayer = true; @@ -53,7 +55,7 @@ export default class GeomanDrawPolyline extends Draw { // show the hintmarker if the option is set if (this.options.cursorMarker) { - this._hintMarker._icon.classList.add('visible'); + this._hintMarker._icon.classList.add('leaflet-geoman-visible'); } // add tooltip to hintmarker @@ -70,7 +72,7 @@ export default class GeomanDrawPolyline extends Draw { } // change map cursor - this._map.getContainer().classList.add('geoman-draw-cursor'); + this._map.getContainer().classList.add('leaflet-geoman-draw-cursor'); // create a polygon-point on click this._map.on('click', this._createVertex, this); @@ -122,7 +124,7 @@ export default class GeomanDrawPolyline extends Draw { this._enabled = false; // reset cursor - this._map.getContainer().classList.remove('geoman-draw-cursor'); + this._map.getContainer().classList.remove('leaflet-geoman-draw-cursor'); // unbind listeners this._map.off('click', this._createVertex, this); @@ -402,7 +404,7 @@ export default class GeomanDrawPolyline extends Draw { // create the new marker const marker = new Marker(latlng, { draggable: false, - icon: new DivIcon({ className: 'marker-icon' }), + icon: new DivIcon({ className: 'leaflet-geoman-vertex-icon' }), }); this._setPane(marker, 'vertexPane'); marker._pmTempLayer = true; diff --git a/src/js/Draw/L.PM.Draw.Rectangle.js b/src/js/Draw/L.PM.Draw.Rectangle.js index 7f871d19..15a97a9b 100644 --- a/src/js/Draw/L.PM.Draw.Rectangle.js +++ b/src/js/Draw/L.PM.Draw.Rectangle.js @@ -37,7 +37,10 @@ export default class GeomanDrawRectangle extends Draw { // this is the marker at the origin of the rectangle // this needs to be present, for tracking purposes, but we'll make it invisible if a user doesn't want to see it! this._startMarker = new Marker(this._map.getCenter(), { - icon: new DivIcon({ className: 'marker-icon rect-start-marker' }), + icon: new DivIcon({ + className: + 'leaflet-geoman-vertex-icon leaflet-geoman-rect-start-marker', + }), draggable: false, zIndexOffset: -100, opacity: this.options.cursorMarker ? 1 : 0, @@ -49,7 +52,9 @@ export default class GeomanDrawRectangle extends Draw { // this is the hintmarker on the pointer cursor this._hintMarker = new Marker(this._map.getCenter(), { zIndexOffset: 150, - icon: new DivIcon({ className: 'marker-icon cursor-marker' }), + icon: new DivIcon({ + className: 'leaflet-geoman-vertex-icon leaflet-geoman-cursor-marker', + }), }); this._setPane(this._hintMarker, 'vertexPane'); this._hintMarker._pmTempLayer = true; @@ -57,7 +62,7 @@ export default class GeomanDrawRectangle extends Draw { // show the hintmarker if the option is set if (this.options.cursorMarker) { - this._hintMarker._icon.classList.add('visible'); + this._hintMarker._icon.classList.add('leaflet-geoman-visible'); } // add tooltip to hintmarker @@ -79,7 +84,8 @@ export default class GeomanDrawRectangle extends Draw { for (let i = 0; i < 2; i += 1) { const styleMarker = new Marker(this._map.getCenter(), { icon: new DivIcon({ - className: 'marker-icon rect-style-marker', + className: + 'leaflet-geoman-vertex-icon leaflet-geoman-rect-style-marker', }), draggable: false, zIndexOffset: 100, @@ -93,7 +99,7 @@ export default class GeomanDrawRectangle extends Draw { } // change map cursor - this._map.getContainer().classList.add('geoman-draw-cursor'); + this._map.getContainer().classList.add('leaflet-geoman-draw-cursor'); // create a polygon-point on click this._map.on('click', this._placeStartingMarkers, this); @@ -124,7 +130,7 @@ export default class GeomanDrawRectangle extends Draw { this._enabled = false; // reset cursor - this._map.getContainer().classList.remove('geoman-draw-cursor'); + this._map.getContainer().classList.remove('leaflet-geoman-draw-cursor'); // unbind listeners this._map.off('click', this._finishShape, this); @@ -169,13 +175,13 @@ export default class GeomanDrawRectangle extends Draw { const latlng = this._hintMarker.getLatLng(); // show and place start marker - this._startMarker._icon.classList.add('visible'); + this._startMarker._icon.classList.add('leaflet-geoman-visible'); this._startMarker.setLatLng(latlng); // if we have the other two visibilty markers, show and place them now if (this.options.cursorMarker && this._styleMarkers) { this._styleMarkers.forEach((styleMarker) => { - styleMarker._icon.classList.add('visible'); + styleMarker._icon.classList.add('leaflet-geoman-visible'); styleMarker.setLatLng(latlng); }); } diff --git a/src/js/Draw/L.PM.Draw.Text.js b/src/js/Draw/L.PM.Draw.Text.js index 14cad301..4e882289 100644 --- a/src/js/Draw/L.PM.Draw.Text.js +++ b/src/js/Draw/L.PM.Draw.Text.js @@ -27,7 +27,9 @@ export default class GeomanDrawText extends Draw { this._hintMarker = new Marker(this._map.getCenter(), { interactive: false, zIndexOffset: 100, - icon: new DivIcon({ className: 'marker-icon cursor-marker' }), + icon: new DivIcon({ + className: 'leaflet-geoman-vertex-icon leaflet-geoman-cursor-marker', + }), }); this._setPane(this._hintMarker, 'vertexPane'); this._hintMarker._pmTempLayer = true; @@ -35,7 +37,7 @@ export default class GeomanDrawText extends Draw { // show the hintmarker if the option is set if (this.options.cursorMarker) { - this._hintMarker._icon.classList.add('visible'); + this._hintMarker._icon.classList.add('leaflet-geoman-visible'); } // add tooltip to hintmarker @@ -57,7 +59,7 @@ export default class GeomanDrawText extends Draw { // sync hint marker with pointer cursor this._map.on('pointermove', this._syncHintMarker, this); - this._map.getContainer().classList.add('geoman-draw-cursor'); + this._map.getContainer().classList.add('leaflet-geoman-draw-cursor'); // fire drawstart event this._fireDrawStart(); @@ -79,7 +81,7 @@ export default class GeomanDrawText extends Draw { // remove hint marker this._hintMarker?.remove(); - this._map.getContainer().classList.remove('geoman-draw-cursor'); + this._map.getContainer().classList.remove('leaflet-geoman-draw-cursor'); // remove event listener to sync hint marker this._map.off('pointermove', this._syncHintMarker, this); @@ -203,13 +205,16 @@ export default class GeomanDrawText extends Draw { _createTextArea() { const textArea = document.createElement('textarea'); textArea.readOnly = true; - textArea.classList.add('pm-textarea', 'pm-disabled'); + textArea.classList.add( + 'leaflet-geoman-textarea', + 'leaflet-geoman-disabled' + ); return textArea; } _createTextIcon(textArea) { return new DivIcon({ - className: 'pm-text-marker', + className: 'leaflet-geoman-text-marker', html: textArea, }); } diff --git a/src/js/Edit/L.PM.Edit.Circle.js b/src/js/Edit/L.PM.Edit.Circle.js index 082833a5..90870938 100644 --- a/src/js/Edit/L.PM.Edit.Circle.js +++ b/src/js/Edit/L.PM.Edit.Circle.js @@ -29,7 +29,7 @@ export default class GeomanEditCircle extends GeomanEditCircleMarker { const el = this._layer._path ? this._layer._path : this._layer._renderer._container; - el.classList.remove('leaflet-pm-draggable'); + el.classList.remove('leaflet-geoman-draggable'); } _extendingApplyOptions() {} diff --git a/src/js/Edit/L.PM.Edit.CircleMarker.js b/src/js/Edit/L.PM.Edit.CircleMarker.js index 656909ae..f951f079 100644 --- a/src/js/Edit/L.PM.Edit.CircleMarker.js +++ b/src/js/Edit/L.PM.Edit.CircleMarker.js @@ -214,7 +214,7 @@ export default class GeomanEditCircleMarker extends Edit { _createCenterMarker(latlng) { const marker = this._createMarker(latlng); if (this.options.draggable) { - marker._icon.classList.add('leaflet-pm-draggable'); + marker._icon.classList.add('leaflet-geoman-draggable'); marker.on('move', this._moveCircle, this); } else { marker.dragging.disable(); @@ -231,7 +231,7 @@ export default class GeomanEditCircleMarker extends Edit { _createMarker(latlng) { const marker = new Marker(latlng, { draggable: true, - icon: new DivIcon({ className: 'marker-icon' }), + icon: new DivIcon({ className: 'leaflet-geoman-vertex-icon' }), }); this._setPane(marker, 'vertexPane'); diff --git a/src/js/Edit/L.PM.Edit.Polyline.js b/src/js/Edit/L.PM.Edit.Polyline.js index 801c8650..93562bf8 100644 --- a/src/js/Edit/L.PM.Edit.Polyline.js +++ b/src/js/Edit/L.PM.Edit.Polyline.js @@ -119,7 +119,7 @@ export default class GeomanEditPolyline extends Edit { const el = this._layer._path ? this._layer._path : this._layer._renderer._container; - el.classList.remove('leaflet-pm-draggable'); + el.classList.remove('leaflet-geoman-draggable'); if (this._layerEdited) { this._fireUpdate(); @@ -202,7 +202,7 @@ export default class GeomanEditPolyline extends Edit { _createMarker(latlng) { const marker = new Marker(latlng, { draggable: true, - icon: new DivIcon({ className: 'marker-icon' }), + icon: new DivIcon({ className: 'leaflet-geoman-vertex-icon' }), }); this._setPane(marker, 'vertexPane'); @@ -243,7 +243,7 @@ export default class GeomanEditPolyline extends Edit { const middleMarker = this._createMarker(latlng); const middleIcon = new DivIcon({ - className: 'marker-icon marker-icon-middle', + className: 'leaflet-geoman-vertex-icon leaflet-geoman-vertex-icon-middle', }); middleMarker.setIcon(middleIcon); middleMarker.leftM = leftM; @@ -268,7 +268,7 @@ export default class GeomanEditPolyline extends Edit { // TODO: move the next two lines inside _addMarker() as soon as // https://github.com/Leaflet/Leaflet/issues/4484 // is fixed - const icon = new DivIcon({ className: 'marker-icon' }); + const icon = new DivIcon({ className: 'leaflet-geoman-vertex-icon' }); middleMarker.setIcon(icon); this._addMarker(middleMarker, middleMarker.leftM, middleMarker.rightM); } @@ -300,7 +300,7 @@ export default class GeomanEditPolyline extends Edit { if (!this._vertexValidationDragEnd(middleMarker)) { return; } - const icon = new DivIcon({ className: 'marker-icon' }); + const icon = new DivIcon({ className: 'leaflet-geoman-vertex-icon' }); middleMarker.setIcon(icon); // timeout is needed else this._onVertexClick fires the event because it is called after deleting the flag setTimeout(() => { @@ -455,9 +455,9 @@ export default class GeomanEditPolyline extends Edit { this._updateDisabledMarkerStyle(marker, disabled); } else if (marker._icon) { if (disabled && !this._checkMarkerAllowedToDrag(marker)) { - marker._icon.classList.add('vertexmarker-disabled'); + marker._icon.classList.add('leaflet-geoman-vertex-disabled'); } else { - marker._icon.classList.remove('vertexmarker-disabled'); + marker._icon.classList.remove('leaflet-geoman-vertex-disabled'); } } }); diff --git a/src/js/Edit/L.PM.Edit.Rectangle.js b/src/js/Edit/L.PM.Edit.Rectangle.js index 80ce8297..bd53db9f 100644 --- a/src/js/Edit/L.PM.Edit.Rectangle.js +++ b/src/js/Edit/L.PM.Edit.Rectangle.js @@ -53,7 +53,7 @@ export default class GeomanEditRectangle extends GeomanEditPolygon { _createMarker(latlng, index) { const marker = new Marker(latlng, { draggable: true, - icon: new DivIcon({ className: 'marker-icon' }), + icon: new DivIcon({ className: 'leaflet-geoman-vertex-icon' }), }); this._setPane(marker, 'vertexPane'); diff --git a/src/js/Edit/L.PM.Edit.Text.js b/src/js/Edit/L.PM.Edit.Text.js index e119288c..4f823921 100644 --- a/src/js/Edit/L.PM.Edit.Text.js +++ b/src/js/Edit/L.PM.Edit.Text.js @@ -34,7 +34,7 @@ export default class GeomanEditCircleText extends Edit { this._focusChange(); this.textArea.readOnly = false; - this.textArea.classList.remove('pm-disabled'); + this.textArea.classList.remove('leaflet-geoman-disabled'); // if shape gets removed from map, disable edit mode this._layer.on('remove', this.disable, this); @@ -67,7 +67,7 @@ export default class GeomanEditCircleText extends Edit { this._focusChange(); this.textArea.readOnly = true; - this.textArea.classList.add('pm-disabled'); + this.textArea.classList.add('leaflet-geoman-disabled'); // remove selection const focusedElement = document.activeElement; @@ -190,7 +190,7 @@ export default class GeomanEditCircleText extends Edit { } _applyFocus() { - this.textArea.classList.add('pm-hasfocus'); + this.textArea.classList.add('leaflet-geoman-hasfocus'); if (this._map.dragging) { // save current map dragging state @@ -211,7 +211,7 @@ export default class GeomanEditCircleText extends Edit { this._safeToCacheDragState = true; } - this.textArea.classList.remove('pm-hasfocus'); + this.textArea.classList.remove('leaflet-geoman-hasfocus'); } focus() { diff --git a/src/js/Mixins/Dragging.js b/src/js/Mixins/Dragging.js index e52a3cd4..ad7a2b86 100644 --- a/src/js/Mixins/Dragging.js +++ b/src/js/Mixins/Dragging.js @@ -170,7 +170,7 @@ const DragMixin = { if (!this._dragging) { // set state this._dragging = true; - el.classList.add('leaflet-pm-dragging'); + el.classList.add('leaflet-geoman-dragging'); if (!(this._layer instanceof Marker)) { // bring it to front to prevent drag interception @@ -235,7 +235,7 @@ const DragMixin = { this._dragging = false; // if the layer is not on the map, we have no DOM element if (el) { - el.classList.remove('leaflet-pm-dragging'); + el.classList.remove('leaflet-geoman-dragging'); } // fire pm:dragend event @@ -331,13 +331,13 @@ const DragMixin = { addDraggingClass() { const el = this._getDOMElem(); if (el) { - el.classList.add('leaflet-pm-draggable'); + el.classList.add('leaflet-geoman-draggable'); } }, removeDraggingClass() { const el = this._getDOMElem(); if (el) { - el.classList.remove('leaflet-pm-draggable'); + el.classList.remove('leaflet-geoman-draggable'); } }, _getDOMElem() { diff --git a/src/js/Toolbar/L.Controls.js b/src/js/Toolbar/L.Controls.js index f9b9d441..603e1a7d 100644 --- a/src/js/Toolbar/L.Controls.js +++ b/src/js/Toolbar/L.Controls.js @@ -119,12 +119,15 @@ export default class PMButton extends Control { } _makeButton(button) { - const pos = this.options.position.indexOf('right') > -1 ? 'pos-right' : ''; + const pos = + this.options.position.indexOf('right') > -1 + ? 'leaflet-geoman-pos-right' + : ''; // button container const buttonContainer = DomUtil.create( 'div', - `button-container ${pos}`, + `leaflet-geoman-button-container ${pos}`, this._container ); @@ -135,7 +138,7 @@ export default class PMButton extends Control { // the button itself const newButton = DomUtil.create( 'a', - 'leaflet-buttons-control-button', + 'leaflet-geoman-buttons-control-button', buttonContainer ); newButton.setAttribute('role', 'button'); @@ -145,7 +148,7 @@ export default class PMButton extends Control { // the buttons actions const actionContainer = DomUtil.create( 'div', - `leaflet-pm-actions-container ${pos}`, + `leaflet-geoman-actions-container ${pos}`, buttonContainer ); @@ -194,7 +197,7 @@ export default class PMButton extends Control { } const actionNode = DomUtil.create( 'a', - `leaflet-pm-action ${pos} action-${name}`, + `leaflet-geoman-action ${pos} action-${name}`, actionContainer ); actionNode.setAttribute('role', 'button'); @@ -240,10 +243,14 @@ export default class PMButton extends Control { this._updateActiveAction(button); if (button.toggleStatus) { - buttonContainer.classList.add('active'); + buttonContainer.classList.add('leaflet-geoman-active'); } - const image = DomUtil.create('div', 'control-icon', newButton); + const image = DomUtil.create( + 'div', + 'leaflet-geoman-control-icon', + newButton + ); if (button.iconUrl) { image.setAttribute('src', button.iconUrl); @@ -263,7 +270,7 @@ export default class PMButton extends Control { } if (button.disabled) { - newButton.classList.add('pm-disabled'); + newButton.classList.add('leaflet-geoman-disabled'); newButton.setAttribute('aria-disabled', 'true'); } @@ -276,11 +283,11 @@ export default class PMButton extends Control { } if (!this._button.toggleStatus || this._button.cssToggle === false) { - this.buttonsDomNode.classList.remove('active'); - this.buttonsDomNode.classList.remove('activeChild'); + this.buttonsDomNode.classList.remove('leaflet-geoman-active'); + this.buttonsDomNode.classList.remove('leaflet-geoman-active-child'); } else { - this.buttonsDomNode.classList.add('active'); - this.buttonsDomNode.classList.add('activeChild'); + this.buttonsDomNode.classList.add('leaflet-geoman-active'); + this.buttonsDomNode.classList.add('leaflet-geoman-active-child'); } } @@ -313,7 +320,7 @@ export default class PMButton extends Control { return; } - const className = 'pm-disabled'; + const className = 'leaflet-geoman-disabled'; const button = this.buttonsDomNode.children[0]; if (this._button.disabled) { @@ -329,9 +336,9 @@ export default class PMButton extends Control { button._preparedActions?.forEach((action) => { if (action?._node) { if (action.isActive && action.isActive.call(this)) { - action._node.classList.add('active-action'); + action._node.classList.add('leaflet-geoman-active-action'); } else { - action._node.classList.remove('active-action'); + action._node.classList.remove('leaflet-geoman-active-action'); } } }); diff --git a/src/js/Toolbar/L.PM.Toolbar.js b/src/js/Toolbar/L.PM.Toolbar.js index 87681702..422a6e60 100644 --- a/src/js/Toolbar/L.PM.Toolbar.js +++ b/src/js/Toolbar/L.PM.Toolbar.js @@ -69,19 +69,19 @@ export default class Toolbar extends Class { this.isVisible = false; this.drawContainer = DomUtil.create( 'div', - 'leaflet-pm-toolbar leaflet-pm-draw leaflet-bar leaflet-control' + 'leaflet-geoman-toolbar leaflet-geoman-draw leaflet-bar leaflet-control' ); this.editContainer = DomUtil.create( 'div', - 'leaflet-pm-toolbar leaflet-pm-edit leaflet-bar leaflet-control' + 'leaflet-geoman-toolbar leaflet-geoman-edit leaflet-bar leaflet-control' ); this.optionsContainer = DomUtil.create( 'div', - 'leaflet-pm-toolbar leaflet-pm-options leaflet-bar leaflet-control' + 'leaflet-geoman-toolbar leaflet-geoman-options leaflet-bar leaflet-control' ); this.customContainer = DomUtil.create( 'div', - 'leaflet-pm-toolbar leaflet-pm-custom leaflet-bar leaflet-control' + 'leaflet-geoman-toolbar leaflet-geoman-custom leaflet-bar leaflet-control' ); this._defineButtons(); @@ -92,7 +92,7 @@ export default class Toolbar extends Class { if (!this[container]) { this[container] = DomUtil.create( 'div', - `leaflet-pm-toolbar leaflet-pm-${name} leaflet-bar leaflet-control` + `leaflet-geoman-toolbar leaflet-geoman-${name} leaflet-bar leaflet-control` ); } return this[container]; @@ -120,17 +120,20 @@ export default class Toolbar extends Class { const iconClasses = { geomanIcons: { - drawMarker: 'control-icon leaflet-pm-icon-marker', - drawPolyline: 'control-icon leaflet-pm-icon-polyline', - drawRectangle: 'control-icon leaflet-pm-icon-rectangle', - drawPolygon: 'control-icon leaflet-pm-icon-polygon', - drawCircle: 'control-icon leaflet-pm-icon-circle', - drawCircleMarker: 'control-icon leaflet-pm-icon-circle-marker', - editMode: 'control-icon leaflet-pm-icon-edit', - dragMode: 'control-icon leaflet-pm-icon-drag', - cutPolygon: 'control-icon leaflet-pm-icon-cut', - removalMode: 'control-icon leaflet-pm-icon-delete', - drawText: 'control-icon leaflet-pm-icon-text', + drawMarker: 'leaflet-geoman-control-icon leaflet-geoman-icon-marker', + drawPolyline: + 'leaflet-geoman-control-icon leaflet-geoman-icon-polyline', + drawRectangle: + 'leaflet-geoman-control-icon leaflet-geoman-icon-rectangle', + drawPolygon: 'leaflet-geoman-control-icon leaflet-geoman-icon-polygon', + drawCircle: 'leaflet-geoman-control-icon leaflet-geoman-icon-circle', + drawCircleMarker: + 'leaflet-geoman-control-icon leaflet-geoman-icon-circle-marker', + editMode: 'leaflet-geoman-control-icon leaflet-geoman-icon-edit', + dragMode: 'leaflet-geoman-control-icon leaflet-geoman-icon-drag', + cutPolygon: 'leaflet-geoman-control-icon leaflet-geoman-icon-cut', + removalMode: 'leaflet-geoman-control-icon leaflet-geoman-icon-delete', + drawText: 'leaflet-geoman-control-icon leaflet-geoman-icon-text', }, }; @@ -219,7 +222,7 @@ export default class Toolbar extends Class { _defineButtons() { // some buttons are still in their respective classes, like L.PM.Draw.Polygon const drawMarkerButton = { - className: 'control-icon leaflet-pm-icon-marker', + className: 'leaflet-geoman-control-icon leaflet-geoman-icon-marker', title: getTranslation('buttonTitles.drawMarkerButton'), jsClass: 'Marker', onClick: () => {}, @@ -236,7 +239,7 @@ export default class Toolbar extends Class { const drawPolyButton = { title: getTranslation('buttonTitles.drawPolyButton'), - className: 'control-icon leaflet-pm-icon-polygon', + className: 'leaflet-geoman-control-icon leaflet-geoman-icon-polygon', jsClass: 'Polygon', onClick: () => {}, afterClick: (e, ctx) => { @@ -251,7 +254,7 @@ export default class Toolbar extends Class { }; const drawLineButton = { - className: 'control-icon leaflet-pm-icon-polyline', + className: 'leaflet-geoman-control-icon leaflet-geoman-icon-polyline', title: getTranslation('buttonTitles.drawLineButton'), jsClass: 'Polyline', onClick: () => {}, @@ -268,7 +271,7 @@ export default class Toolbar extends Class { const drawCircleButton = { title: getTranslation('buttonTitles.drawCircleButton'), - className: 'control-icon leaflet-pm-icon-circle', + className: 'leaflet-geoman-control-icon leaflet-geoman-icon-circle', jsClass: 'Circle', onClick: () => {}, afterClick: (e, ctx) => { @@ -284,7 +287,8 @@ export default class Toolbar extends Class { const drawCircleMarkerButton = { title: getTranslation('buttonTitles.drawCircleMarkerButton'), - className: 'control-icon leaflet-pm-icon-circle-marker', + className: + 'leaflet-geoman-control-icon leaflet-geoman-icon-circle-marker', jsClass: 'CircleMarker', onClick: () => {}, afterClick: (e, ctx) => { @@ -300,7 +304,7 @@ export default class Toolbar extends Class { const drawRectButton = { title: getTranslation('buttonTitles.drawRectButton'), - className: 'control-icon leaflet-pm-icon-rectangle', + className: 'leaflet-geoman-control-icon leaflet-geoman-icon-rectangle', jsClass: 'Rectangle', onClick: () => {}, afterClick: (e, ctx) => { @@ -316,7 +320,7 @@ export default class Toolbar extends Class { const editButton = { title: getTranslation('buttonTitles.editButton'), - className: 'control-icon leaflet-pm-icon-edit', + className: 'leaflet-geoman-control-icon leaflet-geoman-icon-edit', onClick: () => {}, afterClick: () => { this.map.pm.toggleGlobalEditMode(); @@ -331,7 +335,7 @@ export default class Toolbar extends Class { const dragButton = { title: getTranslation('buttonTitles.dragButton'), - className: 'control-icon leaflet-pm-icon-drag', + className: 'leaflet-geoman-control-icon leaflet-geoman-icon-drag', onClick: () => {}, afterClick: () => { this.map.pm.toggleGlobalDragMode(); @@ -346,7 +350,7 @@ export default class Toolbar extends Class { const cutButton = { title: getTranslation('buttonTitles.cutButton'), - className: 'control-icon leaflet-pm-icon-cut', + className: 'leaflet-geoman-control-icon leaflet-geoman-icon-cut', jsClass: 'Cut', onClick: () => {}, afterClick: (e, ctx) => { @@ -367,7 +371,7 @@ export default class Toolbar extends Class { const deleteButton = { title: getTranslation('buttonTitles.deleteButton'), - className: 'control-icon leaflet-pm-icon-delete', + className: 'leaflet-geoman-control-icon leaflet-geoman-icon-delete', onClick: () => {}, afterClick: () => { this.map.pm.toggleGlobalRemovalMode(); @@ -382,7 +386,7 @@ export default class Toolbar extends Class { const rotateButton = { title: getTranslation('buttonTitles.rotateButton'), - className: 'control-icon leaflet-pm-icon-rotate', + className: 'leaflet-geoman-control-icon leaflet-geoman-icon-rotate', onClick: () => {}, afterClick: () => { this.map.pm.toggleGlobalRotateMode(); @@ -396,7 +400,7 @@ export default class Toolbar extends Class { }; const drawTextButton = { - className: 'control-icon leaflet-pm-icon-text', + className: 'leaflet-geoman-control-icon leaflet-geoman-icon-text', title: getTranslation('buttonTitles.drawTextButton'), jsClass: 'Text', onClick: () => {}, @@ -551,9 +555,11 @@ export default class Toolbar extends Class { } if (!options.className) { - options.className = 'control-icon'; - } else if (options.className.indexOf('control-icon') === -1) { - options.className = `control-icon ${options.className}`; + options.className = 'leaflet-geoman-control-icon'; + } else if ( + options.className.indexOf('leaflet-geoman-control-icon') === -1 + ) { + options.className = `leaflet-geoman-control-icon ${options.className}`; } const _options = { From 7b3605ea7cafe554775a79d2fe262b143f013c34 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 09:34:25 +0100 Subject: [PATCH 29/41] Rename PMButton to GeomanControl --- src/js/Mixins/Events.js | 4 +- .../{L.Controls.js => L.PM.GeomanControl.js} | 2 +- src/js/Toolbar/L.PM.Toolbar.js | 37 ++++++++++--------- 3 files changed, 23 insertions(+), 20 deletions(-) rename src/js/Toolbar/{L.Controls.js => L.PM.GeomanControl.js} (99%) diff --git a/src/js/Mixins/Events.js b/src/js/Mixins/Events.js index 2936e29d..79dc977f 100644 --- a/src/js/Mixins/Events.js +++ b/src/js/Mixins/Events.js @@ -530,7 +530,7 @@ const EventMixin = { source = 'Toolbar', customPayload = {} ) { - // this._map is used because this is fired from Controls (PMButton) + // this._map is used because this is fired from Controls (GeomanControl) this.__fire( this._map, 'pm:actionclick', @@ -546,7 +546,7 @@ const EventMixin = { }, // Fired when a Toolbar button is clicked _fireButtonClick(btnName, button, source = 'Toolbar', customPayload = {}) { - // this._map is used because this is fired from Controls (PMButton) + // this._map is used because this is fired from Controls (GeomanControl) this.__fire( this._map, 'pm:buttonclick', diff --git a/src/js/Toolbar/L.Controls.js b/src/js/Toolbar/L.PM.GeomanControl.js similarity index 99% rename from src/js/Toolbar/L.Controls.js rename to src/js/Toolbar/L.PM.GeomanControl.js index 603e1a7d..3a9b8e5a 100644 --- a/src/js/Toolbar/L.Controls.js +++ b/src/js/Toolbar/L.PM.GeomanControl.js @@ -2,7 +2,7 @@ import { Control, DomEvent, DomUtil } from 'leaflet'; import { getTranslation } from '../helpers'; import EventMixin from '../Mixins/Events'; -export default class PMButton extends Control { +export default class GeomanControl extends Control { static { this.include(EventMixin); diff --git a/src/js/Toolbar/L.PM.Toolbar.js b/src/js/Toolbar/L.PM.Toolbar.js index 422a6e60..c2e41623 100644 --- a/src/js/Toolbar/L.PM.Toolbar.js +++ b/src/js/Toolbar/L.PM.Toolbar.js @@ -1,10 +1,8 @@ -import PMButton from './L.Controls'; +import GeomanControl from './L.PM.GeomanControl'; -import { Class, Control, DomUtil, Util } from 'leaflet'; +import { Class, DomUtil, Util } from 'leaflet'; import { getTranslation } from '../helpers'; -Control.PMButton = PMButton; - export default class Toolbar extends Class { static { this.setDefaultOptions({ @@ -415,18 +413,21 @@ export default class Toolbar extends Class { actions: ['cancel'], }; - this._addButton('drawMarker', new PMButton(drawMarkerButton)); - this._addButton('drawPolyline', new PMButton(drawLineButton)); - this._addButton('drawRectangle', new PMButton(drawRectButton)); - this._addButton('drawPolygon', new PMButton(drawPolyButton)); - this._addButton('drawCircle', new PMButton(drawCircleButton)); - this._addButton('drawCircleMarker', new PMButton(drawCircleMarkerButton)); - this._addButton('drawText', new PMButton(drawTextButton)); - this._addButton('editMode', new PMButton(editButton)); - this._addButton('dragMode', new PMButton(dragButton)); - this._addButton('cutPolygon', new PMButton(cutButton)); - this._addButton('removalMode', new PMButton(deleteButton)); - this._addButton('rotateMode', new PMButton(rotateButton)); + this._addButton('drawMarker', new GeomanControl(drawMarkerButton)); + this._addButton('drawPolyline', new GeomanControl(drawLineButton)); + this._addButton('drawRectangle', new GeomanControl(drawRectButton)); + this._addButton('drawPolygon', new GeomanControl(drawPolyButton)); + this._addButton('drawCircle', new GeomanControl(drawCircleButton)); + this._addButton( + 'drawCircleMarker', + new GeomanControl(drawCircleMarkerButton) + ); + this._addButton('drawText', new GeomanControl(drawTextButton)); + this._addButton('editMode', new GeomanControl(editButton)); + this._addButton('dragMode', new GeomanControl(dragButton)); + this._addButton('cutPolygon', new GeomanControl(cutButton)); + this._addButton('removalMode', new GeomanControl(deleteButton)); + this._addButton('rotateMode', new GeomanControl(rotateButton)); } _showHideButtons() { @@ -583,7 +584,7 @@ export default class Toolbar extends Class { this.options[options.name] = true; } - const control = this._addButton(options.name, new PMButton(_options)); + const control = this._addButton(options.name, new GeomanControl(_options)); this.changeControlOrder(); return control; } @@ -736,3 +737,5 @@ export default class Toolbar extends Class { return shapeMapping[name] ? shapeMapping[name] : name; } } + +Toolbar.GeomanControl = GeomanControl; From a112855658641154109de50a83c1dd8b446f86d9 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 09:43:43 +0100 Subject: [PATCH 30/41] Remove event argument from Control onClick & afterClick --- leaflet-geoman.d.ts | 8 ++++---- src/js/Toolbar/L.PM.GeomanControl.js | 5 ++--- src/js/Toolbar/L.PM.Toolbar.js | 16 ++++++++-------- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/leaflet-geoman.d.ts b/leaflet-geoman.d.ts index 4dedb748..11c63987 100644 --- a/leaflet-geoman.d.ts +++ b/leaflet-geoman.d.ts @@ -1130,7 +1130,7 @@ declare module 'leaflet' { actions?: (ACTION_NAMES | Action)[]; /** Function fired after clicking the control. */ - afterClick?: () => void; + afterClick?: (ctx: { button: Button; event: MouseEvent }) => void; /** CSS class with the Icon. */ className?: string; @@ -1145,7 +1145,7 @@ declare module 'leaflet' { jsClass?: string; /** Function fired when clicking the control. */ - onClick?: () => void; + onClick?: (ctx: { button: Button; event: MouseEvent }) => void; position?: L.ControlPosition; @@ -1173,10 +1173,10 @@ declare module 'leaflet' { className?: string; /** Function fired when clicking the control. */ - onClick?: () => void; + onClick?: (ctx: { button: Button; event: MouseEvent }) => void; /** Function fired after clicking the control. */ - afterClick?: () => void; + afterClick?: (ctx: { button: Button; event: MouseEvent }) => void; /** Actions */ actions?: (ACTION_NAMES | Action)[]; diff --git a/src/js/Toolbar/L.PM.GeomanControl.js b/src/js/Toolbar/L.PM.GeomanControl.js index 3a9b8e5a..22f87259 100644 --- a/src/js/Toolbar/L.PM.GeomanControl.js +++ b/src/js/Toolbar/L.PM.GeomanControl.js @@ -112,10 +112,9 @@ export default class GeomanControl extends Control { if (this._button.disabled) { return; } - // TODO is this a big change when we change from e to a object with the event and the button? Now it's the second argument - this._button.onClick(e, { button: this, event: e }); + this._button.onClick({ button: this, event: e }); this._clicked(e); - this._button.afterClick(e, { button: this, event: e }); + this._button.afterClick({ button: this, event: e }); } _makeButton(button) { diff --git a/src/js/Toolbar/L.PM.Toolbar.js b/src/js/Toolbar/L.PM.Toolbar.js index c2e41623..40c0c811 100644 --- a/src/js/Toolbar/L.PM.Toolbar.js +++ b/src/js/Toolbar/L.PM.Toolbar.js @@ -224,7 +224,7 @@ export default class Toolbar extends Class { title: getTranslation('buttonTitles.drawMarkerButton'), jsClass: 'Marker', onClick: () => {}, - afterClick: (e, ctx) => { + afterClick: (ctx) => { // toggle drawing mode this.map.pm.Draw[ctx.button._button.jsClass].toggle(); }, @@ -240,7 +240,7 @@ export default class Toolbar extends Class { className: 'leaflet-geoman-control-icon leaflet-geoman-icon-polygon', jsClass: 'Polygon', onClick: () => {}, - afterClick: (e, ctx) => { + afterClick: (ctx) => { // toggle drawing mode this.map.pm.Draw[ctx.button._button.jsClass].toggle(); }, @@ -256,7 +256,7 @@ export default class Toolbar extends Class { title: getTranslation('buttonTitles.drawLineButton'), jsClass: 'Polyline', onClick: () => {}, - afterClick: (e, ctx) => { + afterClick: (ctx) => { // toggle drawing mode this.map.pm.Draw[ctx.button._button.jsClass].toggle(); }, @@ -272,7 +272,7 @@ export default class Toolbar extends Class { className: 'leaflet-geoman-control-icon leaflet-geoman-icon-circle', jsClass: 'Circle', onClick: () => {}, - afterClick: (e, ctx) => { + afterClick: (ctx) => { // toggle drawing mode this.map.pm.Draw[ctx.button._button.jsClass].toggle(); }, @@ -289,7 +289,7 @@ export default class Toolbar extends Class { 'leaflet-geoman-control-icon leaflet-geoman-icon-circle-marker', jsClass: 'CircleMarker', onClick: () => {}, - afterClick: (e, ctx) => { + afterClick: (ctx) => { // toggle drawing mode this.map.pm.Draw[ctx.button._button.jsClass].toggle(); }, @@ -305,7 +305,7 @@ export default class Toolbar extends Class { className: 'leaflet-geoman-control-icon leaflet-geoman-icon-rectangle', jsClass: 'Rectangle', onClick: () => {}, - afterClick: (e, ctx) => { + afterClick: (ctx) => { // toggle drawing mode this.map.pm.Draw[ctx.button._button.jsClass].toggle(); }, @@ -351,7 +351,7 @@ export default class Toolbar extends Class { className: 'leaflet-geoman-control-icon leaflet-geoman-icon-cut', jsClass: 'Cut', onClick: () => {}, - afterClick: (e, ctx) => { + afterClick: (ctx) => { // enable polygon drawing mode without snap this.map.pm.Draw[ctx.button._button.jsClass].toggle({ snappable: true, @@ -402,7 +402,7 @@ export default class Toolbar extends Class { title: getTranslation('buttonTitles.drawTextButton'), jsClass: 'Text', onClick: () => {}, - afterClick: (e, ctx) => { + afterClick: (ctx) => { // toggle drawing mode this.map.pm.Draw[ctx.button._button.jsClass].toggle(); }, From d10321808030bc089beac3538ceb9e4b94778afa Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 10:40:25 +0100 Subject: [PATCH 31/41] Rename "PM" to "Geoman" --- .github/ISSUE_TEMPLATE/bug-report.yml | 2 +- .vscode/settings.json | 3 + bundle.mjs | 2 +- cypress/e2e/circle.cy.js | 106 +-- cypress/e2e/circlemarker.cy.js | 128 +-- cypress/e2e/developing.cy.js | 6 +- cypress/e2e/events.cy.js | 260 +++--- cypress/e2e/globalmodes.cy.js | 64 +- cypress/e2e/imageoverlay.cy.js | 8 +- cypress/e2e/layergroup.cy.js | 56 +- cypress/e2e/marker.cy.js | 70 +- cypress/e2e/options.cy.js | 42 +- cypress/e2e/polygon.cy.js | 181 ++-- cypress/e2e/polyline.cy.js | 47 +- cypress/e2e/rectangle.cy.js | 208 ++--- cypress/e2e/rotation.cy.js | 156 ++-- cypress/e2e/text.cy.js | 252 +++--- cypress/e2e/toolbar.cy.js | 94 ++- cypress/e2e/tooltips.cy.js | 16 +- cypress/support/commands.js | 30 +- cypress/support/e2e.js | 2 +- demo/customcontrols.js | 14 +- demo/demo-canvas.js | 128 +-- demo/demo.js | 136 +-- demo/events.js | 80 +- leaflet-geoman.d.ts | 792 +++++++++--------- .../{L.PM.Draw.Circle.js => Draw.Circle.js} | 2 +- ...w.CircleMarker.js => Draw.CircleMarker.js} | 46 +- src/js/Draw/{L.PM.Draw.Cut.js => Draw.Cut.js} | 42 +- .../{L.PM.Draw.Marker.js => Draw.Marker.js} | 32 +- .../{L.PM.Draw.Polygon.js => Draw.Polygon.js} | 12 +- ...L.PM.Draw.Polyline.js => Draw.Polyline.js} | 24 +- ...PM.Draw.Rectangle.js => Draw.Rectangle.js} | 28 +- .../Draw/{L.PM.Draw.Text.js => Draw.Text.js} | 30 +- src/js/Draw/{L.PM.Draw.js => Draw.js} | 34 +- .../{L.PM.Edit.Circle.js => Edit.Circle.js} | 6 +- ...t.CircleMarker.js => Edit.CircleMarker.js} | 38 +- ...t.ImageOverlay.js => Edit.ImageOverlay.js} | 2 +- ....Edit.LayerGroup.js => Edit.LayerGroup.js} | 60 +- .../{L.PM.Edit.Marker.js => Edit.Marker.js} | 32 +- .../{L.PM.Edit.Polygon.js => Edit.Polygon.js} | 2 +- ...L.PM.Edit.Polyline.js => Edit.Polyline.js} | 12 +- ...PM.Edit.Rectangle.js => Edit.Rectangle.js} | 10 +- .../Edit/{L.PM.Edit.Text.js => Edit.Text.js} | 22 +- src/js/Edit/{L.PM.Edit.js => Edit.js} | 14 +- src/js/Geoman.js | 281 +++++++ src/js/{L.PM.Map.js => GeomanMap.js} | 46 +- src/js/{L.PM.Utils.js => GeomanUtils.js} | 22 +- src/js/L.PM.js | 281 ------- src/js/Mixins/Dragging.js | 32 +- src/js/Mixins/Events.js | 100 +-- src/js/Mixins/Keyboard.js | 2 +- src/js/Mixins/MarkerLimits.js | 12 +- src/js/Mixins/Modes/Mode.Drag.js | 20 +- src/js/Mixins/Modes/Mode.Edit.js | 20 +- src/js/Mixins/Modes/Mode.Removal.js | 28 +- src/js/Mixins/Modes/Mode.Rotate.js | 20 +- src/js/Mixins/Rotating.js | 52 +- src/js/Mixins/Snapping.js | 54 +- ...L.PM.GeomanControl.js => GeomanControl.js} | 22 +- .../{L.PM.Toolbar.js => GeomanToolbar.js} | 32 +- src/js/helpers/Matrix.js | 21 +- src/js/helpers/index.js | 2 +- 63 files changed, 2222 insertions(+), 2156 deletions(-) create mode 100644 .vscode/settings.json rename src/js/Draw/{L.PM.Draw.Circle.js => Draw.Circle.js} (92%) rename src/js/Draw/{L.PM.Draw.CircleMarker.js => Draw.CircleMarker.js} (93%) rename src/js/Draw/{L.PM.Draw.Cut.js => Draw.Cut.js} (88%) rename src/js/Draw/{L.PM.Draw.Marker.js => Draw.Marker.js} (85%) rename src/js/Draw/{L.PM.Draw.Polygon.js => Draw.Polygon.js} (92%) rename src/js/Draw/{L.PM.Draw.Polyline.js => Draw.Polyline.js} (95%) rename src/js/Draw/{L.PM.Draw.Rectangle.js => Draw.Rectangle.js} (92%) rename src/js/Draw/{L.PM.Draw.Text.js => Draw.Text.js} (85%) rename src/js/Draw/{L.PM.Draw.js => Draw.js} (88%) rename src/js/Edit/{L.PM.Edit.Circle.js => Edit.Circle.js} (91%) rename src/js/Edit/{L.PM.Edit.CircleMarker.js => Edit.CircleMarker.js} (92%) rename src/js/Edit/{L.PM.Edit.ImageOverlay.js => Edit.ImageOverlay.js} (98%) rename src/js/Edit/{L.PM.Edit.LayerGroup.js => Edit.LayerGroup.js} (76%) rename src/js/Edit/{L.PM.Edit.Marker.js => Edit.Marker.js} (74%) rename src/js/Edit/{L.PM.Edit.Polygon.js => Edit.Polygon.js} (94%) rename src/js/Edit/{L.PM.Edit.Polyline.js => Edit.Polyline.js} (99%) rename src/js/Edit/{L.PM.Edit.Rectangle.js => Edit.Rectangle.js} (96%) rename src/js/Edit/{L.PM.Edit.Text.js => Edit.Text.js} (92%) rename src/js/Edit/{L.PM.Edit.js => Edit.js} (89%) create mode 100644 src/js/Geoman.js rename src/js/{L.PM.Map.js => GeomanMap.js} (84%) rename src/js/{L.PM.Utils.js => GeomanUtils.js} (89%) delete mode 100644 src/js/L.PM.js rename src/js/Toolbar/{L.PM.GeomanControl.js => GeomanControl.js} (92%) rename src/js/Toolbar/{L.PM.Toolbar.js => GeomanToolbar.js} (95%) diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 841a5077..7615652a 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -28,7 +28,7 @@ body: id: geoman-version attributes: label: Geoman version - description: You can get the Geoman version via `L.PM.version` + description: You can get the Geoman version via `Geoman.version` validations: required: true diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..6f3a2913 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "liveServer.settings.port": 5501 +} \ No newline at end of file diff --git a/bundle.mjs b/bundle.mjs index 77c8889e..6d6286f0 100644 --- a/bundle.mjs +++ b/bundle.mjs @@ -17,7 +17,7 @@ const plugins = [{ const buildOptions = { bundle: true, - entryPoints: ['./src/js/L.PM.js'], + entryPoints: ['./src/js/Geoman.js'], loader: { '.js': 'jsx', '.css': 'css', diff --git a/cypress/e2e/circle.cy.js b/cypress/e2e/circle.cy.js index e2a5559c..1e1282ef 100644 --- a/cypress/e2e/circle.cy.js +++ b/cypress/e2e/circle.cy.js @@ -59,7 +59,7 @@ describe('Draw Circle', () => { radius: 20, }, }; - map.pm.enableDraw('Circle', options); + map.geoman.enableDraw('Circle', options); cy.get(mapSelector) .click(200, 200) @@ -82,7 +82,7 @@ describe('Draw Circle', () => { .should('have.class', 'leaflet-geoman-active'); cy.window().then(({ map, L }) => { - map.pm.setPathOptions({ + map.geoman.setPathOptions({ color: 'yellow', }); @@ -101,7 +101,7 @@ describe('Draw Circle', () => { it('enable continueDrawing', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ continueDrawing: true }); + map.geoman.setGlobalOptions({ continueDrawing: true }); }); cy.toolbarButton('circle') @@ -116,7 +116,7 @@ describe('Draw Circle', () => { cy.get(mapSelector).click(300, 200).click(350, 250); cy.window().then(({ map }) => { - const latlng = map.pm.Draw.Circle._hintMarker.getLatLng(); + const latlng = map.geoman.Draw.Circle._hintMarker.getLatLng(); const pxLatLng = map.containerPointToLatLng([350, 250]); expect(pxLatLng).to.deep.equal(latlng); }); @@ -135,7 +135,7 @@ describe('Draw Circle', () => { cy.window().then(({ map, L }) => { new L.Marker(map.getCenter()).addTo(map); - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ minRadiusCircle: 500, maxRadiusCircle: 1500, }); @@ -143,7 +143,7 @@ describe('Draw Circle', () => { .click(250, 200) .click(400, 190) .then(() => { - const layers = map.pm.getGeomanDrawLayers(); + const layers = map.geoman.getGeomanDrawLayers(); layers.forEach((layer) => { if (layer instanceof L.Circle) { expect(layer.getRadius()).to.equal(1500); @@ -160,7 +160,7 @@ describe('Draw Circle', () => { cy.window().then(({ map, L }) => { new L.Marker(map.getCenter()).addTo(map); - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ minRadiusCircle: 1500, maxRadiusCircle: 3000, }); @@ -168,7 +168,7 @@ describe('Draw Circle', () => { .click(250, 200) .click(300, 190) .then(() => { - const layers = map.pm.getGeomanDrawLayers(); + const layers = map.geoman.getGeomanDrawLayers(); layers.forEach((layer) => { if (layer instanceof L.Circle) { expect(layer.getRadius()).to.equal(1500); @@ -179,7 +179,7 @@ describe('Draw Circle', () => { }); it('requireSnapToFinish', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ requireSnapToFinish: true, snapSegment: false, }); @@ -196,13 +196,13 @@ describe('Draw Circle', () => { cy.get(mapSelector).click(350, 250).click(190, 60); cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); }); cy.get(mapSelector).click(250, 50); cy.window().then(({ map }) => { - expect(2).to.eq(map.pm.getGeomanDrawLayers().length); + expect(2).to.eq(map.geoman.getGeomanDrawLayers().length); }); }); @@ -215,7 +215,7 @@ describe('Draw Circle', () => { minZoom: -2, doubleClickZoom: false, // Leaflet 1.8 DoubleTap fix }).setView([0, 0], 0); - mapSimple.pm.addControls(); + mapSimple.geoman.addControls(); }); cy.toolbarButton('circle').click(); @@ -224,14 +224,14 @@ describe('Draw Circle', () => { cy.toolbarButton('edit').click(); cy.window().then(() => { - expect(1).to.eq(mapSimple.pm.getGeomanDrawLayers().length); + expect(1).to.eq(mapSimple.geoman.getGeomanDrawLayers().length); - const circle = mapSimple.pm.getGeomanDrawLayers()[0]; + const circle = mapSimple.geoman.getGeomanDrawLayers()[0]; // move marker - const marker = circle.pm._markers[1]; + const marker = circle.geoman._markers[1]; marker.setLatLng([marker.getLatLng().lng, marker.getLatLng().lat + 10]); - circle.pm._resizeCircle(); + circle.geoman._resizeCircle(); expect(167).to.eq(Math.floor(circle.getRadius())); }); @@ -246,7 +246,7 @@ describe('Draw Circle', () => { minZoom: -2, doubleClickZoom: false, // Leaflet 1.8 DoubleTap fix }).setView([0, 0], 0); - mapSimple.pm.addControls(); + mapSimple.geoman.addControls(); }); cy.toolbarButton('circle').click(); @@ -256,7 +256,7 @@ describe('Draw Circle', () => { cy.get(mapSelector).click(350, 450).click(465, 250); cy.window().then(() => { - const radius = mapSimple.pm.getGeomanDrawLayers()[1].getRadius(); + const radius = mapSimple.geoman.getGeomanDrawLayers()[1].getRadius(); expect(radius).to.greaterThan(223); expect(radius).to.below(226); }); @@ -265,7 +265,7 @@ describe('Draw Circle', () => { cy.toolbarButton('circle').click(); cy.window().then(({ map }) => { // if map property is null, then it is not visible - expect(!!map.pm.Draw.Circle._layer._map).to.eq(false); + expect(!!map.geoman.Draw.Circle._layer._map).to.eq(false); }); }); it('removes circle if enabled', () => { @@ -280,7 +280,7 @@ describe('Draw Circle', () => { cy.hasLayers(7); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; + const layer = map.geoman.getGeomanDrawLayers()[0]; layer.remove(); }); cy.hasLayers(2); @@ -294,7 +294,7 @@ describe('Draw Circle', () => { cy.get(mapSelector).click(350, 250).click(450, 250); cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ maxRadiusCircle: 1500, }); }); @@ -303,8 +303,8 @@ describe('Draw Circle', () => { cy.get(mapSelector).click(355, 250).click(475, 250); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; - const layer2 = map.pm.getGeomanDrawLayers()[1]; + const layer = map.geoman.getGeomanDrawLayers()[0]; + const layer2 = map.geoman.getGeomanDrawLayers()[1]; expect(layer.getLatLng().equals(layer2.getLatLng())).to.eq(true); }); }); @@ -322,10 +322,13 @@ describe('Draw Circle', () => { const style = { color: 'red', }; - map.pm.setGlobalOptions({ templineStyle: style, hintlineStyle: style }); + map.geoman.setGlobalOptions({ + templineStyle: style, + hintlineStyle: style, + }); - const layer = map.pm.Draw.Circle._layer; - const hintLine = map.pm.Draw.Circle._hintline; + const layer = map.geoman.Draw.Circle._layer; + const hintLine = map.geoman.Draw.Circle._hintline; expect(layer.options.color).to.eql('red'); expect(hintLine.options.color).to.eql('red'); }); @@ -341,24 +344,24 @@ describe('Draw Circle', () => { cy.get(mapSelector).click(300, 300); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; + const layer = map.geoman.getGeomanDrawLayers()[0]; let disableFired = false; - layer.on('pm:disable', () => { + layer.on('geoman:disable', () => { disableFired = true; }); - layer.pm.disable(); + layer.geoman.disable(); expect(disableFired).to.eql(false); - layer.pm.enable(); - layer.pm.disable(); + layer.geoman.enable(); + layer.geoman.disable(); expect(disableFired).to.eql(true); }); }); it('creates circles (non-resizeableCircle)', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ resizeableCircle: false, continueDrawing: true, }); @@ -383,7 +386,7 @@ describe('Draw Circle', () => { it('disable dragging correctly (non-resizeableCircle)', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ resizeableCircle: false }); + map.geoman.setGlobalOptions({ resizeableCircle: false }); }); cy.toolbarButton('circle') @@ -395,19 +398,19 @@ describe('Draw Circle', () => { cy.get(mapSelector).click(300, 300); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; + const layer = map.geoman.getGeomanDrawLayers()[0]; - expect(layer.pm.layerDragEnabled()).to.eql(false); - layer.pm.enable(); - expect(layer.pm.layerDragEnabled()).to.eql(true); - layer.pm.disable(); - expect(layer.pm.layerDragEnabled()).to.eql(false); + expect(layer.geoman.layerDragEnabled()).to.eql(false); + layer.geoman.enable(); + expect(layer.geoman.layerDragEnabled()).to.eql(true); + layer.geoman.disable(); + expect(layer.geoman.layerDragEnabled()).to.eql(false); }); }); it('deletes no circles by right-click (non-resizeableCircle)', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ resizeableCircle: false }); + map.geoman.setGlobalOptions({ resizeableCircle: false }); }); cy.toolbarButton('circle') @@ -431,7 +434,7 @@ describe('Draw Circle', () => { it('change color of circleMarker while drawing (non-resizeableCircle)', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ resizeableCircle: false }); + map.geoman.setGlobalOptions({ resizeableCircle: false }); }); cy.toolbarButton('circle') @@ -445,9 +448,12 @@ describe('Draw Circle', () => { const style = { color: 'red', }; - map.pm.setGlobalOptions({ templineStyle: style, hintlineStyle: style }); + map.geoman.setGlobalOptions({ + templineStyle: style, + hintlineStyle: style, + }); - const layer = map.pm.Draw.Circle._layer; + const layer = map.geoman.Draw.Circle._layer; expect(layer.options.color).to.eql('red'); }); }); @@ -463,8 +469,8 @@ describe('Draw Circle', () => { cy.window().then(({ map }) => { let count = 0; - const layer = map.pm.getGeomanDrawLayers()[0]; - layer.on('pm:vertexclick', () => { + const layer = map.geoman.getGeomanDrawLayers()[0]; + layer.on('geoman:vertexclick', () => { count += 1; if (count >= 2) { expect(count).to.eql(2); @@ -488,11 +494,11 @@ describe('Draw Circle', () => { cy.get(mapSelector).click(300, 200); cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ snappable: false }); + map.geoman.setGlobalOptions({ snappable: false }); }); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanLayers()[0]; + const layer = map.geoman.getGeomanLayers()[0]; expect(layer.getLatLng().lat).to.eq(51.51034504891232); expect(layer.getLatLng().lng).to.eq(-0.14144897460937503); expect(layer.getRadius()).to.eq(1187.9783670191234); @@ -507,7 +513,7 @@ describe('Draw Circle', () => { .trigger('pointerup', 300, 250, { eventConstructor: 'PointerEvent' }); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanLayers()[0]; + const layer = map.geoman.getGeomanLayers()[0]; expect(layer.getLatLng().lat).to.eq(51.51034504891232); expect(layer.getLatLng().lng).to.eq(-0.14144897460937503); expect(layer.getRadius()).to.eq(1328.278061564339); @@ -520,7 +526,7 @@ describe('Draw Circle', () => { .trigger('pointerup', 200, 250, { eventConstructor: 'PointerEvent' }); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanLayers()[0]; + const layer = map.geoman.getGeomanLayers()[0]; expect(layer.getLatLng().lat).to.eq(51.50500286265417); expect(layer.getLatLng().lng).to.eq(-0.14144897460937503); expect(layer.getRadius()).to.eq(1328.278061564339); @@ -543,7 +549,7 @@ describe('Draw Circle', () => { .trigger('pointerup', 390, 230, { eventConstructor: 'PointerEvent' }); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanLayers()[1]; + const layer = map.geoman.getGeomanLayers()[1]; expect(layer.getLatLng().lat).to.eq(51.51034504891232); expect(layer.getLatLng().lng).to.eq(-0.12428283691406251); expect(layer.getRadius()).to.eq(1240.3294565841613); diff --git a/cypress/e2e/circlemarker.cy.js b/cypress/e2e/circlemarker.cy.js index 1ac11bcf..091363f8 100644 --- a/cypress/e2e/circlemarker.cy.js +++ b/cypress/e2e/circlemarker.cy.js @@ -116,7 +116,7 @@ describe('Draw Circle Marker', () => { it('draw a CircleMarker like a Circle', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ resizeableCircleMarker: true, continueDrawing: false, }); @@ -145,7 +145,7 @@ describe('Draw Circle Marker', () => { it('enable continueDrawing #2', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ continueDrawing: true, resizeableCircleMarker: true, }); @@ -163,7 +163,7 @@ describe('Draw Circle Marker', () => { cy.get(mapSelector).click(300, 200).click(350, 250); cy.window().then(({ map }) => { - const latlng = map.pm.Draw.CircleMarker._hintMarker.getLatLng(); + const latlng = map.geoman.Draw.CircleMarker._hintMarker.getLatLng(); const pxLatLng = map.containerPointToLatLng([350, 250]); expect(pxLatLng).to.deep.equal(latlng); }); @@ -175,9 +175,9 @@ describe('Draw Circle Marker', () => { cy.hasVertexMarkers(4); }); - it('snapping to CircleMarker with pmIgnore:true', () => { + it('snapping to CircleMarker with geomanIgnore:true', () => { cy.window().then(({ map, L }) => { - new L.CircleMarker(map.getCenter(), { pmIgnore: true }).addTo(map); + new L.CircleMarker(map.getCenter(), { geomanIgnore: true }).addTo(map); }); cy.toolbarButton('rectangle') @@ -197,7 +197,7 @@ describe('Draw Circle Marker', () => { it('disable continueDrawing', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ continueDrawing: false }); + map.geoman.setGlobalOptions({ continueDrawing: false }); }); cy.toolbarButton('circle-marker').click(); @@ -215,22 +215,22 @@ describe('Draw Circle Marker', () => { it('disable markerEditable', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ markerEditable: false }); + map.geoman.setGlobalOptions({ markerEditable: false }); }); cy.toolbarButton('circle-marker').click(); cy.get(mapSelector).click(191, 216); cy.window().then(({ map }) => { - const marker = map.pm.getGeomanDrawLayers()[0]; - const enabled = marker.pm.enabled(); + const marker = map.geoman.getGeomanDrawLayers()[0]; + const enabled = marker.geoman.enabled(); expect(enabled).to.equal(false); }); }); it('enable markerEditable but disable MarkerRemoval', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ markerEditable: true, preventMarkerRemoval: true, }); @@ -240,8 +240,8 @@ describe('Draw Circle Marker', () => { cy.get(mapSelector).click(191, 216); cy.window().then(({ map }) => { - const marker = map.pm.getGeomanDrawLayers()[0]; - const enabled = marker.pm.enabled(); + const marker = map.geoman.getGeomanDrawLayers()[0]; + const enabled = marker.geoman.enabled(); expect(enabled).to.equal(true); }); @@ -258,7 +258,7 @@ describe('Draw Circle Marker', () => { cy.window().then(({ map, L }) => { new L.Marker(map.getCenter()).addTo(map); - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ minRadiusCircleMarker: 50, maxRadiusCircleMarker: 150, resizeableCircleMarker: true, @@ -267,7 +267,7 @@ describe('Draw Circle Marker', () => { .click(250, 200) .click(410, 190) .then(() => { - const layers = map.pm.getGeomanDrawLayers(); + const layers = map.geoman.getGeomanDrawLayers(); layers.forEach((layer) => { if (layer instanceof L.CircleMarker) { expect(layer.getRadius()).to.equal(150); @@ -284,7 +284,7 @@ describe('Draw Circle Marker', () => { cy.window().then(({ map, L }) => { new L.Marker(map.getCenter()).addTo(map); - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ minRadiusCircleMarker: 150, maxRadiusCircleMarker: 300, resizeableCircleMarker: true, @@ -293,7 +293,7 @@ describe('Draw Circle Marker', () => { .click(250, 200) .click(300, 200) .then(() => { - const layers = map.pm.getGeomanDrawLayers(); + const layers = map.geoman.getGeomanDrawLayers(); layers.forEach((layer) => { if (layer instanceof L.CircleMarker) { expect(layer.getRadius()).to.equal(150); @@ -304,7 +304,7 @@ describe('Draw Circle Marker', () => { }); it('requireSnapToFinish', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ requireSnapToFinish: true, snapSegment: false, }); @@ -321,18 +321,18 @@ describe('Draw Circle Marker', () => { cy.get(mapSelector).click(350, 250).click(190, 60); cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); }); cy.get(mapSelector).click(250, 50); cy.window().then(({ map }) => { - expect(2).to.eq(map.pm.getGeomanDrawLayers().length); + expect(2).to.eq(map.geoman.getGeomanDrawLayers().length); }); }); it('requireSnapToFinish resizeableCircleMarker', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ requireSnapToFinish: true, resizeableCircleMarker: true, snapSegment: false, @@ -350,13 +350,13 @@ describe('Draw Circle Marker', () => { cy.get(mapSelector).click(350, 250).click(190, 60); cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); }); cy.get(mapSelector).click(250, 50); cy.window().then(({ map }) => { - expect(2).to.eq(map.pm.getGeomanDrawLayers().length); + expect(2).to.eq(map.geoman.getGeomanDrawLayers().length); }); }); @@ -368,16 +368,18 @@ describe('Draw Circle Marker', () => { crs: L.CRS.Simple, minZoom: -2, }).setView([0, 0], 0); - mapSimple.pm.addControls(); + mapSimple.geoman.addControls(); - mapSimple.pm.enableDraw('CircleMarker', { pathOptions: { radius: 40 } }); + mapSimple.geoman.enableDraw('CircleMarker', { + pathOptions: { radius: 40 }, + }); }); cy.get(mapSelector).click(350, 250); cy.get(mapSelector).click(350, 300); cy.window().then(() => { - const radius = mapSimple.pm.getGeomanDrawLayers()[1].getRadius(); + const radius = mapSimple.geoman.getGeomanDrawLayers()[1].getRadius(); expect(radius).to.eq(40); }); }); @@ -390,9 +392,11 @@ describe('Draw Circle Marker', () => { crs: L.CRS.Simple, minZoom: -2, }).setView([0, 0], 0); - mapSimple.pm.addControls(); + mapSimple.geoman.addControls(); - mapSimple.pm.enableDraw('CircleMarker', { resizeableCircleMarker: true }); + mapSimple.geoman.enableDraw('CircleMarker', { + resizeableCircleMarker: true, + }); }); cy.get(mapSelector).click(350, 250).click(450, 250); @@ -400,25 +404,25 @@ describe('Draw Circle Marker', () => { cy.get(mapSelector).click(350, 450).click(465, 250); cy.window().then(() => { - const radius = mapSimple.pm.getGeomanDrawLayers()[1].getRadius(); + const radius = mapSimple.geoman.getGeomanDrawLayers()[1].getRadius(); expect(radius).to.greaterThan(223); expect(radius).to.below(226); }); }); it('checks if circle is hidden before drawing', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ resizeableCircleMarker: true }); + map.geoman.setGlobalOptions({ resizeableCircleMarker: true }); }); cy.toolbarButton('circle-marker').click(); cy.window().then(({ map }) => { // if map property is null, then it is not visible - expect(!!map.pm.Draw.CircleMarker._layer._map).to.eq(false); + expect(!!map.geoman.Draw.CircleMarker._layer._map).to.eq(false); }); }); it('removes circleMarker if enabled', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ resizeableCircleMarker: true }); + map.geoman.setGlobalOptions({ resizeableCircleMarker: true }); }); cy.toolbarButton('circle-marker') @@ -429,7 +433,7 @@ describe('Draw Circle Marker', () => { cy.get(mapSelector).click(350, 250).click(190, 60); cy.window().then(({ map }) => { - map.pm.disableDraw(); + map.geoman.disableDraw(); }); cy.toolbarButton('edit') @@ -439,7 +443,7 @@ describe('Draw Circle Marker', () => { cy.hasLayers(7); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; + const layer = map.geoman.getGeomanDrawLayers()[0]; layer.remove(); }); cy.hasLayers(2); @@ -447,7 +451,7 @@ describe('Draw Circle Marker', () => { it('check if snapping works with max radius of circle', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ resizeableCircleMarker: true, }); }); @@ -459,7 +463,7 @@ describe('Draw Circle Marker', () => { cy.get(mapSelector).click(320, 250).click(450, 250); cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ maxRadiusCircleMarker: 100, }); }); @@ -467,8 +471,8 @@ describe('Draw Circle Marker', () => { cy.get(mapSelector).click(325, 250).click(475, 250); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; - const layer2 = map.pm.getGeomanDrawLayers()[1]; + const layer = map.geoman.getGeomanDrawLayers()[0]; + const layer2 = map.geoman.getGeomanDrawLayers()[1]; expect(layer.getLatLng().equals(layer2.getLatLng())).to.eq(true); }); }); @@ -485,16 +489,19 @@ describe('Draw Circle Marker', () => { const style = { color: 'red', }; - map.pm.setGlobalOptions({ templineStyle: style, hintlineStyle: style }); + map.geoman.setGlobalOptions({ + templineStyle: style, + hintlineStyle: style, + }); - const layer = map.pm.Draw.CircleMarker._layer; + const layer = map.geoman.Draw.CircleMarker._layer; expect(layer.options.color).to.eql('red'); }); }); it('change color of circleMarker (resizeableCircleMarker) while drawing', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ resizeableCircleMarker: true }); + map.geoman.setGlobalOptions({ resizeableCircleMarker: true }); }); cy.toolbarButton('circle-marker') @@ -509,10 +516,13 @@ describe('Draw Circle Marker', () => { const style = { color: 'red', }; - map.pm.setGlobalOptions({ templineStyle: style, hintlineStyle: style }); + map.geoman.setGlobalOptions({ + templineStyle: style, + hintlineStyle: style, + }); - const layer = map.pm.Draw.CircleMarker._layer; - const hintLine = map.pm.Draw.CircleMarker._hintline; + const layer = map.geoman.Draw.CircleMarker._layer; + const hintLine = map.geoman.Draw.CircleMarker._hintline; expect(layer.options.color).to.eql('red'); expect(hintLine.options.color).to.eql('red'); }); @@ -520,7 +530,7 @@ describe('Draw Circle Marker', () => { it('fires disable event only if it was enabled', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ resizeableCircleMarker: true }); + map.geoman.setGlobalOptions({ resizeableCircleMarker: true }); }); cy.toolbarButton('circle-marker') @@ -532,17 +542,17 @@ describe('Draw Circle Marker', () => { cy.get(mapSelector).click(300, 300); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; + const layer = map.geoman.getGeomanDrawLayers()[0]; let disableFired = false; - layer.on('pm:disable', () => { + layer.on('geoman:disable', () => { disableFired = true; }); - layer.pm.disable(); + layer.geoman.disable(); expect(disableFired).to.eql(false); - layer.pm.enable(); - layer.pm.disable(); + layer.geoman.enable(); + layer.geoman.disable(); expect(disableFired).to.eql(true); }); }); @@ -558,19 +568,19 @@ describe('Draw Circle Marker', () => { cy.toolbarButton('circle-marker').click(); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; + const layer = map.geoman.getGeomanDrawLayers()[0]; - expect(layer.pm.layerDragEnabled()).to.eql(false); - layer.pm.enable(); - expect(layer.pm.layerDragEnabled()).to.eql(true); - layer.pm.disable(); - expect(layer.pm.layerDragEnabled()).to.eql(false); + expect(layer.geoman.layerDragEnabled()).to.eql(false); + layer.geoman.enable(); + expect(layer.geoman.layerDragEnabled()).to.eql(true); + layer.geoman.disable(); + expect(layer.geoman.layerDragEnabled()).to.eql(false); }); }); it('draw a CircleMarker like a Circle with option `resizeableCircleMarker`', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ resizeableCircleMarker: true, continueDrawing: false, }); @@ -595,7 +605,7 @@ describe('Draw Circle Marker', () => { it('on vertex click - resizeableCircleMarker', (done) => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ resizeableCircleMarker: true }); + map.geoman.setGlobalOptions({ resizeableCircleMarker: true }); }); cy.toolbarButton('circle-marker') @@ -608,8 +618,8 @@ describe('Draw Circle Marker', () => { cy.window().then(({ map }) => { let count = 0; - const layer = map.pm.getGeomanDrawLayers()[0]; - layer.on('pm:vertexclick', () => { + const layer = map.geoman.getGeomanDrawLayers()[0]; + layer.on('geoman:vertexclick', () => { count += 1; if (count >= 2) { expect(count).to.eql(2); diff --git a/cypress/e2e/developing.cy.js b/cypress/e2e/developing.cy.js index ecafe3d5..b93be402 100644 --- a/cypress/e2e/developing.cy.js +++ b/cypress/e2e/developing.cy.js @@ -16,7 +16,7 @@ describe('Opens Testing Environment', () => { }); cy.window().then(({ map }) => { - const count = map.pm.getGeomanLayers().length; + const count = map.geoman.getGeomanLayers().length; expect(count).to.equal(1); }); }); @@ -38,9 +38,9 @@ describe('Opens Testing Environment', () => { }); cy.window().then(({ map }) => { - const count = map.pm.getGeomanLayers().length; + const count = map.geoman.getGeomanLayers().length; expect(count).to.equal(2); - const count2 = map.pm.getGeomanDrawLayers().length; + const count2 = map.geoman.getGeomanDrawLayers().length; expect(count2).to.equal(1); }); }); diff --git a/cypress/e2e/events.cy.js b/cypress/e2e/events.cy.js index 56a5168e..ad942c30 100644 --- a/cypress/e2e/events.cy.js +++ b/cypress/e2e/events.cy.js @@ -1,304 +1,304 @@ describe('Events', () => { const mapSelector = '#map'; - it('pm:langchange', () => { + it('geoman:langchange', () => { let calledevent = ''; cy.window() .then(({ map }) => { - map.on('pm:langchange', (e) => { + map.on('geoman:langchange', (e) => { calledevent = e.type; }); - map.pm.setLang('de'); + map.geoman.setLang('de'); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:langchange'); + expect(calledevent).to.equal('geoman:langchange'); calledevent = ''; }); }); - it('pm:globaleditmodetoggled', () => { + it('geoman:globaleditmodetoggled', () => { let calledevent = ''; cy.window() .then(({ map }) => { - map.on('pm:globaleditmodetoggled', (e) => { + map.on('geoman:globaleditmodetoggled', (e) => { calledevent = e.type; }); - map.pm.enableGlobalEditMode(); + map.geoman.enableGlobalEditMode(); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:globaleditmodetoggled'); + expect(calledevent).to.equal('geoman:globaleditmodetoggled'); calledevent = ''; }); cy.window() .then(({ map }) => { - map.on('pm:globaleditmodetoggled', (e) => { + map.on('geoman:globaleditmodetoggled', (e) => { calledevent = e.type; }); - map.pm.disableGlobalEditMode(); + map.geoman.disableGlobalEditMode(); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:globaleditmodetoggled'); + expect(calledevent).to.equal('geoman:globaleditmodetoggled'); calledevent = ''; }); cy.window() .then(({ map }) => { - map.on('pm:globaleditmodetoggled', (e) => { + map.on('geoman:globaleditmodetoggled', (e) => { calledevent = e.type; }); - map.pm.toggleGlobalEditMode(); + map.geoman.toggleGlobalEditMode(); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:globaleditmodetoggled'); + expect(calledevent).to.equal('geoman:globaleditmodetoggled'); calledevent = ''; }); }); - it('pm:globaldragmodetoggled', () => { + it('geoman:globaldragmodetoggled', () => { let calledevent = ''; cy.window() .then(({ map }) => { - map.on('pm:globaldragmodetoggled', (e) => { + map.on('geoman:globaldragmodetoggled', (e) => { calledevent = e.type; }); - map.pm.enableGlobalDragMode(); + map.geoman.enableGlobalDragMode(); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:globaldragmodetoggled'); + expect(calledevent).to.equal('geoman:globaldragmodetoggled'); calledevent = ''; }); cy.window() .then(({ map }) => { - map.on('pm:globaldragmodetoggled', (e) => { + map.on('geoman:globaldragmodetoggled', (e) => { calledevent = e.type; }); - map.pm.disableGlobalDragMode(); + map.geoman.disableGlobalDragMode(); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:globaldragmodetoggled'); + expect(calledevent).to.equal('geoman:globaldragmodetoggled'); calledevent = ''; }); cy.window() .then(({ map }) => { - map.on('pm:globaldragmodetoggled', (e) => { + map.on('geoman:globaldragmodetoggled', (e) => { calledevent = e.type; }); - map.pm.toggleGlobalDragMode(); + map.geoman.toggleGlobalDragMode(); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:globaldragmodetoggled'); + expect(calledevent).to.equal('geoman:globaldragmodetoggled'); calledevent = ''; }); }); - it('pm:globalremovalmodetoggled', () => { + it('geoman:globalremovalmodetoggled', () => { let calledevent = ''; cy.window() .then(({ map }) => { - map.on('pm:globalremovalmodetoggled', (e) => { + map.on('geoman:globalremovalmodetoggled', (e) => { calledevent = e.type; }); - map.pm.enableGlobalRemovalMode(); + map.geoman.enableGlobalRemovalMode(); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:globalremovalmodetoggled'); + expect(calledevent).to.equal('geoman:globalremovalmodetoggled'); calledevent = ''; }); cy.window() .then(({ map }) => { - map.on('pm:globalremovalmodetoggled', (e) => { + map.on('geoman:globalremovalmodetoggled', (e) => { calledevent = e.type; }); - map.pm.disableGlobalRemovalMode(); + map.geoman.disableGlobalRemovalMode(); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:globalremovalmodetoggled'); + expect(calledevent).to.equal('geoman:globalremovalmodetoggled'); calledevent = ''; }); cy.window() .then(({ map }) => { - map.on('pm:globalremovalmodetoggled', (e) => { + map.on('geoman:globalremovalmodetoggled', (e) => { calledevent = e.type; }); - map.pm.toggleGlobalRemovalMode(); + map.geoman.toggleGlobalRemovalMode(); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:globalremovalmodetoggled'); + expect(calledevent).to.equal('geoman:globalremovalmodetoggled'); calledevent = ''; }); }); - it('pm:globaldrawmodetoggled', () => { + it('geoman:globaldrawmodetoggled', () => { let calledevent = ''; cy.window() .then(({ map }) => { - map.on('pm:globaldrawmodetoggled', (e) => { + map.on('geoman:globaldrawmodetoggled', (e) => { calledevent = e.type; }); - map.pm.enableDraw('Polygon'); + map.geoman.enableDraw('Polygon'); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:globaldrawmodetoggled'); + expect(calledevent).to.equal('geoman:globaldrawmodetoggled'); calledevent = ''; }); cy.window() .then(({ map }) => { - map.on('pm:globaldrawmodetoggled', (e) => { + map.on('geoman:globaldrawmodetoggled', (e) => { calledevent = e.type; }); - map.pm.disableDraw(); + map.geoman.disableDraw(); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:globaldrawmodetoggled'); + expect(calledevent).to.equal('geoman:globaldrawmodetoggled'); calledevent = ''; }); }); - it('pm:globalcutmodetoggled', () => { + it('geoman:globalcutmodetoggled', () => { let calledevent = ''; cy.window() .then(({ map }) => { - map.on('pm:globalcutmodetoggled', (e) => { + map.on('geoman:globalcutmodetoggled', (e) => { calledevent = e.type; }); - map.pm.enableDraw('Cut'); + map.geoman.enableDraw('Cut'); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:globalcutmodetoggled'); + expect(calledevent).to.equal('geoman:globalcutmodetoggled'); calledevent = ''; }); cy.window() .then(({ map }) => { - map.on('pm:globalcutmodetoggled', (e) => { + map.on('geoman:globalcutmodetoggled', (e) => { calledevent = e.type; }); - map.pm.disableDraw(); + map.geoman.disableDraw(); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:globalcutmodetoggled'); + expect(calledevent).to.equal('geoman:globalcutmodetoggled'); calledevent = ''; }); cy.window() .then(({ map }) => { - map.on('pm:globalcutmodetoggled', (e) => { + map.on('geoman:globalcutmodetoggled', (e) => { calledevent = e.type; }); - map.pm.enableGlobalCutMode(); + map.geoman.enableGlobalCutMode(); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:globalcutmodetoggled'); + expect(calledevent).to.equal('geoman:globalcutmodetoggled'); calledevent = ''; }); cy.window() .then(({ map }) => { - map.on('pm:globalcutmodetoggled', (e) => { + map.on('geoman:globalcutmodetoggled', (e) => { calledevent = e.type; }); - map.pm.disableGlobalCutMode(); + map.geoman.disableGlobalCutMode(); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:globalcutmodetoggled'); + expect(calledevent).to.equal('geoman:globalcutmodetoggled'); calledevent = ''; }); cy.window() .then(({ map }) => { - map.on('pm:globalcutmodetoggled', (e) => { + map.on('geoman:globalcutmodetoggled', (e) => { calledevent = e.type; }); - map.pm.toggleGlobalCutMode(); + map.geoman.toggleGlobalCutMode(); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:globalcutmodetoggled'); + expect(calledevent).to.equal('geoman:globalcutmodetoggled'); calledevent = ''; }); }); - it('pm:drawstart & pm:drawend', () => { + it('geoman:drawstart & geoman:drawend', () => { let calledevent = ''; cy.window() .then(({ map }) => { - map.on('pm:drawstart', (e) => { + map.on('geoman:drawstart', (e) => { calledevent = e.type; }); - map.pm.enableDraw('Polygon'); + map.geoman.enableDraw('Polygon'); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:drawstart'); + expect(calledevent).to.equal('geoman:drawstart'); calledevent = ''; }); cy.window() .then(({ map }) => { - map.on('pm:drawend', (e) => { + map.on('geoman:drawend', (e) => { calledevent = e.type; }); - map.pm.disableDraw(); + map.geoman.disableDraw(); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:drawend'); + expect(calledevent).to.equal('geoman:drawend'); calledevent = ''; }); }); - it('pm:create', () => { + it('geoman:create', () => { let calledevent = ''; cy.window() .then(({ map }) => { - map.on('pm:create', (e) => { + map.on('geoman:create', (e) => { calledevent = e.type; }); - map.pm.enableDraw('Circle'); + map.geoman.enableDraw('Circle'); cy.get(mapSelector).click(200, 200).click(250, 250); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:create'); + expect(calledevent).to.equal('geoman:create'); calledevent = ''; }); }); - it('Events while drawing: pm:vertexadded, pm:snapdrag, pm:snap, pm:unsnap, pm:centerplaced', () => { + it('Events while drawing: geoman:vertexadded, geoman:snapdrag, geoman:snap, geoman:unsnap, geoman:centerplaced', () => { let calledevent = ''; cy.window() @@ -307,21 +307,21 @@ describe('Events', () => { calledevent = e.type; } - map.on('pm:drawstart', (e) => { + map.on('geoman:drawstart', (e) => { const layer = e.workingLayer; - layer.on('pm:vertexadded', logEvent); - layer.on('pm:snapdrag', logEvent); - layer.on('pm:snap', logEvent); - layer.on('pm:unsnap', logEvent); - layer.on('pm:centerplaced', logEvent); + layer.on('geoman:vertexadded', logEvent); + layer.on('geoman:snapdrag', logEvent); + layer.on('geoman:snap', logEvent); + layer.on('geoman:unsnap', logEvent); + layer.on('geoman:centerplaced', logEvent); }); - map.pm.enableDraw('Polygon'); + map.geoman.enableDraw('Polygon'); cy.get(mapSelector).click(200, 300); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:vertexadded'); + expect(calledevent).to.equal('geoman:vertexadded'); calledevent = ''; }); @@ -333,7 +333,7 @@ describe('Events', () => { }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:snap'); + expect(calledevent).to.equal('geoman:snap'); calledevent = ''; }); @@ -346,7 +346,7 @@ describe('Events', () => { }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:unsnap'); + expect(calledevent).to.equal('geoman:unsnap'); calledevent = ''; }); @@ -359,12 +359,12 @@ describe('Events', () => { }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:snapdrag'); + expect(calledevent).to.equal('geoman:snapdrag'); calledevent = ''; }); }); - it(' pm:centerplaced event while drawing', () => { + it(' geoman:centerplaced event while drawing', () => { let calledevent = ''; cy.window() @@ -373,21 +373,21 @@ describe('Events', () => { calledevent = e.type; } - map.on('pm:drawstart', (e) => { + map.on('geoman:drawstart', (e) => { const layer = e.workingLayer; - layer.on('pm:centerplaced', logEvent); + layer.on('geoman:centerplaced', logEvent); }); - map.pm.enableDraw('Circle'); + map.geoman.enableDraw('Circle'); cy.get(mapSelector).click(200, 385).click(200, 200); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:centerplaced'); + expect(calledevent).to.equal('geoman:centerplaced'); calledevent = ''; }); }); - it('Events while editing: pm:edit,pm:update,pm:enable,pm:disable,pm:vertexadded,pm:vertexremoved', () => { + it('Events while editing: geoman:edit,geoman:update,geoman:enable,geoman:disable,geoman:vertexadded,geoman:vertexremoved', () => { let calledevent = ''; let calledeventArr = []; @@ -398,31 +398,31 @@ describe('Events', () => { calledeventArr[e.type] = e.type; } - map.on('pm:create', ({ layer }) => { - map.pm.disableDraw(); + map.on('geoman:create', ({ layer }) => { + map.geoman.disableDraw(); - layer.on('pm:edit', logEvent); - layer.on('pm:update', logEvent); - layer.on('pm:enable', logEvent); - layer.on('pm:disable', logEvent); - layer.on('pm:vertexadded', logEvent); - layer.on('pm:vertexremoved', logEvent); + layer.on('geoman:edit', logEvent); + layer.on('geoman:update', logEvent); + layer.on('geoman:enable', logEvent); + layer.on('geoman:disable', logEvent); + layer.on('geoman:vertexadded', logEvent); + layer.on('geoman:vertexremoved', logEvent); /* TODO Can't tested --> needs dragging - layer.on('pm:vertexdragstart', logEvent); - layer.on('pm:vertexdragend', logEvent); - layer.on('pm:snap', logEvent); - layer.on('pm:snapdrag', logEvent); - layer.on('pm:unsnap', logEvent); - layer.on('pm:intersect', logEvent); - layer.on('pm:centerplaced', logEvent); + layer.on('geoman:vertexdragstart', logEvent); + layer.on('geoman:vertexdragend', logEvent); + layer.on('geoman:snap', logEvent); + layer.on('geoman:snapdrag', logEvent); + layer.on('geoman:unsnap', logEvent); + layer.on('geoman:intersect', logEvent); + layer.on('geoman:centerplaced', logEvent); */ - layer.pm.enable({ + layer.geoman.enable({ allowSelfIntersection: false, }); }); - map.pm.enableDraw('Polygon'); + map.geoman.enableDraw('Polygon'); cy.get(mapSelector) @@ -433,7 +433,7 @@ describe('Events', () => { }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:enable'); + expect(calledevent).to.equal('geoman:enable'); calledevent = ''; }); @@ -443,7 +443,7 @@ describe('Events', () => { }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:vertexadded'); + expect(calledevent).to.equal('geoman:vertexadded'); calledevent = ''; }); @@ -453,46 +453,46 @@ describe('Events', () => { }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:vertexremoved'); + expect(calledevent).to.equal('geoman:vertexremoved'); calledevent = ''; }); cy.window() .then(({ map }) => { - map.pm.disableGlobalEditMode(); + map.geoman.disableGlobalEditMode(); }) .then(() => { cy.wait(100); - expect(calledeventArr['pm:update']).to.equal('pm:update'); + expect(calledeventArr['geoman:update']).to.equal('geoman:update'); calledevent = ''; calledeventArr = []; }); cy.window() .then(({ map }) => { - map.pm.toggleGlobalEditMode(); - map.pm.toggleGlobalEditMode(); + map.geoman.toggleGlobalEditMode(); + map.geoman.toggleGlobalEditMode(); }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:disable'); + expect(calledevent).to.equal('geoman:disable'); calledevent = ''; }); }); - it('pm:cut', () => { + it('geoman:cut', () => { let calledevent = ''; let calledevent2 = ''; cy.window() .then(({ map }) => { - map.on('pm:create', ({ layer }) => { - layer.on('pm:cut', (e) => { + map.on('geoman:create', ({ layer }) => { + layer.on('geoman:cut', (e) => { calledevent = e.type; }); }); - map.on('pm:cut', (e) => { + map.on('geoman:cut', (e) => { calledevent2 = e.type; }); @@ -519,26 +519,26 @@ describe('Events', () => { }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:cut'); - expect(calledevent2).to.equal('pm:cut'); + expect(calledevent).to.equal('geoman:cut'); + expect(calledevent2).to.equal('geoman:cut'); calledevent = ''; }); }); - it('pm:remove', () => { + it('geoman:remove', () => { let calledevent = ''; let calledevent2 = ''; let calledevent3 = ''; cy.window() .then(({ map }) => { - map.on('pm:create', ({ layer }) => { - layer.on('pm:remove', (e) => { + map.on('geoman:create', ({ layer }) => { + layer.on('geoman:remove', (e) => { calledevent = e.type; }); }); - map.on('pm:remove', (e) => { + map.on('geoman:remove', (e) => { calledevent2 = e.type; }); map.on('layerremove', (e) => { @@ -561,8 +561,8 @@ describe('Events', () => { }) .then(() => { cy.wait(100); - expect(calledevent).to.equal('pm:remove'); - expect(calledevent2).to.equal('pm:remove'); + expect(calledevent).to.equal('geoman:remove'); + expect(calledevent2).to.equal('geoman:remove'); expect(calledevent3).to.equal('layerremove'); calledevent = ''; calledevent2 = ''; @@ -573,13 +573,13 @@ describe('Events', () => { it('snappingOrder', () => { let event = ''; cy.window().then(({ map }) => { - map.on('pm:drawstart', (e) => { - e.workingLayer.on('pm:snap', (x) => { + map.on('geoman:drawstart', (e) => { + e.workingLayer.on('geoman:snap', (x) => { event = x; }); }); - map.pm.setGlobalOptions({ snappingOrder: ['Marker'] }); + map.geoman.setGlobalOptions({ snappingOrder: ['Marker'] }); }); cy.window().then(() => { @@ -593,21 +593,21 @@ describe('Events', () => { cy.get(mapSelector).trigger('pointermove', 200, 250, { which: 1 }); }); cy.window().then(() => { - const shape = event.layerInteractedWith.pm._shape; + const shape = event.layerInteractedWith.geoman._shape; expect(shape).to.eq('Marker'); }); cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ snappingOrder: ['CircleMarker'] }); + map.geoman.setGlobalOptions({ snappingOrder: ['CircleMarker'] }); - map.pm.enableDraw('Marker'); + map.geoman.enableDraw('Marker'); cy.get(mapSelector) .trigger('pointermove', 200, 150, { which: 1 }) .trigger('pointermove', 200, 250, { which: 1 }); }); cy.window().then(() => { - const shape = event.layerInteractedWith.pm._shape; + const shape = event.layerInteractedWith.geoman._shape; expect(shape).to.eq('CircleMarker'); }); }); diff --git a/cypress/e2e/globalmodes.cy.js b/cypress/e2e/globalmodes.cy.js index 98e66728..b8da0eeb 100644 --- a/cypress/e2e/globalmodes.cy.js +++ b/cypress/e2e/globalmodes.cy.js @@ -4,7 +4,7 @@ describe('Modes', () => { cy.drawShape('MonsterPolygon'); cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ limitMarkersToCount: -1, }); }); @@ -15,7 +15,7 @@ describe('Modes', () => { cy.toolbarButton('edit').click(); cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ limitMarkersToCount: 20, }); }); @@ -52,12 +52,12 @@ describe('Modes', () => { layer = new L.GeoJSON(geojson).addTo(map).getLayers()[0]; map.fitBounds(layer.getBounds()); - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ limitMarkersToCount: 1, allowSelfIntersection: false, }); - layer.on('pm:vertexdragstart', (e) => { + layer.on('geoman:vertexdragstart', (e) => { markerHtml = e.markerEvent.target._icon; }); }); @@ -99,7 +99,7 @@ describe('Modes', () => { cy.drawShape('PolygonPart1'); cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ limitMarkersToCount: 3, limitMarkersToViewport: true, }); @@ -122,7 +122,7 @@ describe('Modes', () => { cy.drawShape('PolygonPart1'); cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ limitMarkersToCount: 3, limitMarkersToViewport: true, }); @@ -153,17 +153,17 @@ describe('Modes', () => { cy.toolbarButton('delete').click(); }); - it('unable to remove layer with pmIgnore:true', () => { + it('unable to remove layer with geomanIgnore:true', () => { cy.window().then(({ L, map }) => { const testLayer = new L.FeatureGroup(); map.addLayer(testLayer); - map.on('pm:create', ({ layer }) => { + map.on('geoman:create', ({ layer }) => { const poly = layer; const coords = poly.getLatLngs(); - const newPoly = new L.Polygon(coords, { pmIgnore: true }).addTo( + const newPoly = new L.Polygon(coords, { geomanIgnore: true }).addTo( testLayer ); poly.remove(); @@ -203,7 +203,7 @@ describe('Modes', () => { cy.window().then(({ map, L }) => { map.eachLayer((layer) => { if (layer instanceof L.Marker) { - assert.isTrue(layer.pm.layerDragEnabled()); + assert.isTrue(layer.geoman.layerDragEnabled()); } }); }); @@ -213,7 +213,7 @@ describe('Modes', () => { // activate polygon drawing cy.toolbarButton('polygon').click(); - // draw a polygon - triggers the event pm:create + // draw a polygon - triggers the event geoman:create cy.get(mapSelector) .click(90, 250) .click(100, 50) @@ -224,11 +224,11 @@ describe('Modes', () => { cy.window().then(({ map, L }) => { map.eachLayer((l) => { if (l instanceof L.Polygon) { - l.pm.enable(); + l.geoman.enable(); } }); - map.pm.enableGlobalDragMode(); + map.geoman.enableGlobalDragMode(); cy.hasVertexMarkers(0); }); @@ -277,7 +277,7 @@ describe('Modes', () => { cy.window().then(({ map, L }) => { map.eachLayer((layer) => { if (layer instanceof L.CircleMarker) { - assert.isTrue(layer.pm.enabled()); + assert.isTrue(layer.geoman.enabled()); } }); }); @@ -339,7 +339,7 @@ describe('Modes', () => { cy.get(mapSelector).click(200, 200).click(400, 350); cy.window().then(({ map }) => { - map.pm.toggleGlobalEditMode({ + map.geoman.toggleGlobalEditMode({ preventMarkerRemoval: true, }); }); @@ -363,7 +363,7 @@ describe('Modes', () => { }); it('re-enable layers that added while in globaleditmode', () => { cy.window().then(({ map, L }) => { - map.pm.enableGlobalEditMode(); + map.geoman.enableGlobalEditMode(); const json = JSON.parse( '{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.058559,40.718564],[-74.058559,40.726045],[-74.03959,40.726045],[-74.03959,40.718564],[-74.058559,40.718564]]]}}' @@ -411,7 +411,9 @@ describe('Modes', () => { cy.toolbarButton('drag').click(); cy.window().then(({ map }) => { - expect(map.pm.getGeomanLayers()[0].pm.layerDragEnabled()).to.equal(true); + expect( + map.geoman.getGeomanLayers()[0].geoman.layerDragEnabled() + ).to.equal(true); }); cy.window().then(({ map, L }) => { @@ -419,8 +421,12 @@ describe('Modes', () => { }); cy.window().then(({ map }) => { - expect(map.pm.getGeomanLayers()[0].pm.layerDragEnabled()).to.equal(true); - expect(map.pm.getGeomanLayers()[1].pm.layerDragEnabled()).to.equal(true); + expect( + map.geoman.getGeomanLayers()[0].geoman.layerDragEnabled() + ).to.equal(true); + expect( + map.geoman.getGeomanLayers()[1].geoman.layerDragEnabled() + ).to.equal(true); }); }); @@ -436,7 +442,9 @@ describe('Modes', () => { cy.window().then(({ map }) => { setTimeout(() => { - expect(map.pm.getGeomanLayers()[0].pm.rotateEnabled()).to.equal(true); + expect(map.geoman.getGeomanLayers()[0].geoman.rotateEnabled()).to.equal( + true + ); done(); }, 100); }); @@ -454,7 +462,7 @@ describe('Modes', () => { cy.window().then(({ map }) => { setTimeout(() => { - expect(map.pm.getGeomanLayers()[0].pm.enabled()).to.equal(true); + expect(map.geoman.getGeomanLayers()[0].geoman.enabled()).to.equal(true); done(); }, 100); }); @@ -472,9 +480,9 @@ describe('Modes', () => { cy.window().then(({ map }) => { setTimeout(() => { - expect(map.pm.getGeomanLayers()[0].pm.layerDragEnabled()).to.equal( - true - ); + expect( + map.geoman.getGeomanLayers()[0].geoman.layerDragEnabled() + ).to.equal(true); done(); }, 100); }); @@ -492,10 +500,10 @@ describe('Modes', () => { cy.window().then(({ map }) => { setTimeout(() => { - const layer = map.pm.getGeomanLayers()[0]; - expect(layer.listens('click', map.pm.removeLayer, map.pm)).to.equal( - true - ); + const layer = map.geoman.getGeomanLayers()[0]; + expect( + layer.listens('click', map.geoman.removeLayer, map.geoman) + ).to.equal(true); done(); }, 100); }); diff --git a/cypress/e2e/imageoverlay.cy.js b/cypress/e2e/imageoverlay.cy.js index 1bfe3511..8a04cc2e 100644 --- a/cypress/e2e/imageoverlay.cy.js +++ b/cypress/e2e/imageoverlay.cy.js @@ -16,9 +16,9 @@ describe('Opens Testing Environment', () => { { interactive: true } ).addTo(map); - map.on('pm:drawstart', (e) => { + map.on('geoman:drawstart', (e) => { const layer = e.workingLayer; - layer.on('pm:snap', (x) => { + layer.on('geoman:snap', (x) => { eventcalled = x.type; }); }); @@ -32,7 +32,7 @@ describe('Opens Testing Environment', () => { }); cy.window().then(() => { - expect(eventcalled).to.equal('pm:snap'); + expect(eventcalled).to.equal('geoman:snap'); }); }); @@ -52,7 +52,7 @@ describe('Opens Testing Environment', () => { { interactive: true } ).addTo(map); - io.pm._dragMixinOnPointerDown = () => { + io.geoman._dragMixinOnPointerDown = () => { eventcalled = true; }; }); diff --git a/cypress/e2e/layergroup.cy.js b/cypress/e2e/layergroup.cy.js index a023bd77..76b678d1 100644 --- a/cypress/e2e/layergroup.cy.js +++ b/cypress/e2e/layergroup.cy.js @@ -10,7 +10,7 @@ describe('Edit LayerGroup', () => { cy.hasVertexMarkers(0); }); - it('respects pmIgnore', () => { + it('respects geomanIgnore', () => { cy.drawShape('LineString', true); cy.toolbarButton('edit').click(); @@ -21,23 +21,23 @@ describe('Edit LayerGroup', () => { cy.drawShape('FeatureCollectionWithCircles'); cy.get('@featurecol').then((feature) => { - feature.pm.enable(); + feature.geoman.enable(); }); cy.hasVertexMarkers(21); cy.get('@featurecol').then((feature) => { - feature.pm.disable(); + feature.geoman.disable(); }); cy.hasVertexMarkers(0); cy.get('@featurecol').then((feature) => { - feature.pm.toggleEdit(); + feature.geoman.toggleEdit(); }); cy.hasVertexMarkers(21); cy.get('@featurecol').then((feature) => { - feature.pm.toggleEdit(); + feature.geoman.toggleEdit(); }); cy.hasVertexMarkers(0); }); @@ -50,7 +50,7 @@ describe('Edit LayerGroup', () => { map.fitBounds(featureGroup.getBounds()); featureGroup.clearLayers(); - expect(featureGroup.pm._layers).to.have.lengthOf(0); + expect(featureGroup.geoman._layers).to.have.lengthOf(0); }); }); @@ -63,7 +63,7 @@ describe('Edit LayerGroup', () => { fg = new L.FeatureGroup().addTo(map); fg2 = new L.FeatureGroup().addTo(map); - map.pm.setGlobalOptions({ layerGroup: fg }); + map.geoman.setGlobalOptions({ layerGroup: fg }); cy.toolbarButton('rectangle') .click() @@ -103,7 +103,7 @@ describe('Edit LayerGroup', () => { cy.get(mapSelector).click(200, 200).click(400, 350); }); cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ layerGroup: fg2 }); + map.geoman.setGlobalOptions({ layerGroup: fg2 }); cy.hasLayers(5); cy.toolbarButton('circle').click(); @@ -140,11 +140,11 @@ describe('Edit LayerGroup', () => { cy.window().then(({ map, L }) => { fg = new L.FeatureGroup(); - fg.on('pm:cut', (e) => { + fg.on('geoman:cut', (e) => { firedEvent = e.type; }); - map.on('pm:create', (e) => { + map.on('geoman:create', (e) => { e.layer.addTo(fg); }); }); @@ -179,7 +179,7 @@ describe('Edit LayerGroup', () => { .click(450, 100); cy.window().then(() => { - expect(firedEvent).to.equal('pm:cut'); + expect(firedEvent).to.equal('geoman:cut'); }); }); @@ -195,7 +195,7 @@ describe('Edit LayerGroup', () => { .addTo(markers) .addTo(markersChild); - group.on('pm:enable', () => { + group.on('geoman:enable', () => { firedEventCount += 1; }); }); @@ -221,16 +221,16 @@ describe('Edit LayerGroup', () => { .addTo(markers) .addTo(markersChild); - group.on('pm:enable', () => { + group.on('geoman:enable', () => { firedEventCount += 1; }); - layers.on('pm:enable', () => { + layers.on('geoman:enable', () => { firedEventCount += 1; }); - markers.on('pm:enable', () => { + markers.on('geoman:enable', () => { firedEventCount += 1; }); - markersChild.on('pm:enable', () => { + markersChild.on('geoman:enable', () => { firedEventCount += 1; }); }); @@ -249,7 +249,7 @@ describe('Edit LayerGroup', () => { let firedEventCount = 0; cy.get('@feature').then((feature) => { - feature.on('pm:enable', () => { + feature.on('geoman:enable', () => { firedEventCount += 1; }); }); @@ -268,7 +268,7 @@ describe('Edit LayerGroup', () => { map.setView([4.009783550466563, 104.00000000000006], 8); const fg = new L.FeatureGroup().addTo(map); - map.on('pm:create layeradd', (e) => { + map.on('geoman:create layeradd', (e) => { e.layer.addTo(fg); }); }); @@ -289,7 +289,7 @@ describe('Edit LayerGroup', () => { map.setView([4.009783550466563, 104.00000000000006], 8); const fg = new L.FeatureGroup().addTo(map); - map.on('pm:create layeradd', (e) => { + map.on('geoman:create layeradd', (e) => { e.layer.addTo(fg); }); }); @@ -311,23 +311,23 @@ describe('Edit LayerGroup', () => { cy.fixture('LineString') .as('poly') .then((json) => { - layerGroup = new L.GeoJSON(json, { pmIgnore: true }).addTo(map); + layerGroup = new L.GeoJSON(json, { geomanIgnore: true }).addTo(map); const bounds = layerGroup.getBounds(); map.fitBounds(bounds); }); }); cy.window().then(({ map, Geoman }) => { - expect(map.pm.getGeomanLayers().length).to.eq(0); + expect(map.geoman.getGeomanLayers().length).to.eq(0); // enable all child layers of the group - layerGroup.setStyle({ pmIgnore: false }); + layerGroup.setStyle({ geomanIgnore: false }); // enable the group self - layerGroup.options.pmIgnore = false; + layerGroup.options.geomanIgnore = false; Geoman.reInitLayer(layerGroup); - expect(layerGroup.pm).to.not.eq(undefined); - expect(map.pm.getGeomanLayers().length).to.eq(6); + expect(layerGroup.geoman).to.not.eq(undefined); + expect(map.geoman.getGeomanLayers().length).to.eq(6); }); }); @@ -340,13 +340,13 @@ describe('Edit LayerGroup', () => { cy.window().then(({ map, L }) => { const fg = new L.FeatureGroup().addTo(map); - const layers = map.pm.getGeomanDrawLayers(); + const layers = map.geoman.getGeomanDrawLayers(); layers.forEach((layer) => { fg.addLayer(layer); }); - fg.pm.setOptions({ syncLayersOnDrag: true }); + fg.geoman.setOptions({ syncLayersOnDrag: true }); - expect(layers[1].pm.options.syncLayersOnDrag).to.eq(true); + expect(layers[1].geoman.options.syncLayersOnDrag).to.eq(true); }); }); }); diff --git a/cypress/e2e/marker.cy.js b/cypress/e2e/marker.cy.js index f1224f76..87c4d908 100644 --- a/cypress/e2e/marker.cy.js +++ b/cypress/e2e/marker.cy.js @@ -11,11 +11,11 @@ describe('Draw Marker', () => { cy.wait(1000); cy.window().then(({ map, L }) => { - map.pm.enableGlobalEditMode(); + map.geoman.enableGlobalEditMode(); map.eachLayer((layer) => { if (layer instanceof L.Marker) { - assert.isTrue(layer.pm.layerDragEnabled()); + assert.isTrue(layer.geoman.layerDragEnabled()); } }); }); @@ -25,7 +25,7 @@ describe('Draw Marker', () => { cy.window().then(({ map, L }) => { const markerLayer = new L.GeoJSON().addTo(map); - map.pm.enableDraw('Marker', { + map.geoman.enableDraw('Marker', { snappable: false, }); @@ -43,7 +43,7 @@ describe('Draw Marker', () => { }); l.addLayer(m); - map.pm.disableDraw(); + map.geoman.disableDraw(); l.removeLayer(m); return m; @@ -52,7 +52,7 @@ describe('Draw Marker', () => { }); cy.get('@markerLayer').then((markerLayer) => { - markerLayer.pm.disable(); + markerLayer.geoman.disable(); }); }); @@ -95,21 +95,21 @@ describe('Draw Marker', () => { }); }); - it('calls pm:drag-events on Marker drag', (done) => { + it('calls geoman:drag-events on Marker drag', (done) => { let handFinish = false; let dragstart = false; let drag = false; let dragend = false; cy.window().then(({ map }) => { - map.on('pm:create', (e) => { - e.layer.on('pm:dragstart', () => { + map.on('geoman:create', (e) => { + e.layer.on('geoman:dragstart', () => { dragstart = true; }); - e.layer.on('pm:drag', () => { + e.layer.on('geoman:drag', () => { drag = true; }); - e.layer.on('pm:dragend', () => { + e.layer.on('geoman:dragend', () => { dragend = true; }); }); @@ -158,7 +158,7 @@ describe('Draw Marker', () => { cy.toolbarButton('drag').click(); cy.window().then(({ map }) => { - const marker = map.pm.getGeomanDrawLayers()[0]; + const marker = map.geoman.getGeomanDrawLayers()[0]; expect(marker.getLatLng().alt).to.eq(undefined); marker.getLatLng().alt = 10; expect(marker.getLatLng().alt).to.eq(10); @@ -168,7 +168,7 @@ describe('Draw Marker', () => { const handMarker = new Hand({ timing: 'frame', onStop: () => { - const marker = map.pm.getGeomanDrawLayers()[0]; + const marker = map.geoman.getGeomanDrawLayers()[0]; expect(marker.getLatLng().alt).to.eq(10); done(); }, @@ -191,15 +191,15 @@ describe('Draw Marker', () => { cy.toolbarButton('edit').click(); cy.window().then(({ map }) => { - const marker = map.pm.getGeomanDrawLayers()[0]; - const enabled = marker.pm.enabled(); + const marker = map.geoman.getGeomanDrawLayers()[0]; + const enabled = marker.geoman.enabled(); expect(enabled).to.equal(true); }); }); it('disable continueDrawing', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ continueDrawing: false }); + map.geoman.setGlobalOptions({ continueDrawing: false }); }); cy.toolbarButton('marker').click(); @@ -213,22 +213,22 @@ describe('Draw Marker', () => { it('disable markerEditable', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ markerEditable: false }); + map.geoman.setGlobalOptions({ markerEditable: false }); }); cy.toolbarButton('marker').click(); cy.get(mapSelector).click(191, 216); cy.window().then(({ map }) => { - const marker = map.pm.getGeomanDrawLayers()[0]; - const enabled = marker.pm.enabled(); + const marker = map.geoman.getGeomanDrawLayers()[0]; + const enabled = marker.geoman.enabled(); expect(enabled).to.equal(false); }); }); it('enable markerEditable but disable MarkerRemoval', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ markerEditable: true, preventMarkerRemoval: true, }); @@ -238,8 +238,8 @@ describe('Draw Marker', () => { cy.get(mapSelector).click(191, 216); cy.window().then(({ map }) => { - const marker = map.pm.getGeomanDrawLayers()[0]; - const enabled = marker.pm.enabled(); + const marker = map.geoman.getGeomanDrawLayers()[0]; + const enabled = marker.geoman.enabled(); expect(enabled).to.equal(true); }); @@ -249,7 +249,7 @@ describe('Draw Marker', () => { }); it('requireSnapToFinish', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ requireSnapToFinish: true, snapSegment: false, }); @@ -266,28 +266,28 @@ describe('Draw Marker', () => { cy.get(mapSelector).click(350, 250).click(190, 60); cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); }); cy.get(mapSelector).click(250, 50); cy.window().then(({ map }) => { - expect(2).to.eq(map.pm.getGeomanDrawLayers().length); + expect(2).to.eq(map.geoman.getGeomanDrawLayers().length); }); }); - it('fires pm:update after edit', () => { + it('fires geoman:update after edit', () => { cy.toolbarButton('marker').click(); cy.get(mapSelector).click(350, 250); let updateFired = false; cy.window().then(({ map }) => { - const marker = map.pm.getGeomanDrawLayers()[0]; - marker.on('pm:update', () => { + const marker = map.geoman.getGeomanDrawLayers()[0]; + marker.on('geoman:update', () => { updateFired = true; }); - marker.pm.enable(); - marker.pm._layerEdited = true; - marker.pm.disable(); + marker.geoman.enable(); + marker.geoman._layerEdited = true; + marker.geoman.disable(); }); cy.window().then(() => { @@ -304,7 +304,7 @@ describe('Draw Marker', () => { cy.get(mapSelector).trigger('pointermove', 300, 300); cy.window().then(({ map, L }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ markerStyle: { icon: new L.Icon({ iconUrl: 'someIcon.png', @@ -312,7 +312,7 @@ describe('Draw Marker', () => { }, }); - const layer = map.pm.Draw.Marker._hintMarker; + const layer = map.geoman.Draw.Marker._hintMarker; expect(layer._icon.src.endsWith('someIcon.png')).to.eql(true); }); }); @@ -323,7 +323,7 @@ describe('Draw Marker', () => { cy.get(mapSelector).click(150, 250); cy.window().then(({ map }) => { - expect(map.pm.getGeomanDrawLayers().length).to.eq(1); + expect(map.geoman.getGeomanDrawLayers().length).to.eq(1); }); cy.get(mapSelector).trigger('pointerdown', 150, 230, { which: 1 }); @@ -334,14 +334,14 @@ describe('Draw Marker', () => { cy.get(mapSelector).trigger('pointermove', 190, 340, { which: 1 }); cy.window().then(({ map }) => { - expect(map.pm.getGeomanDrawLayers().length).to.eq(1); + expect(map.geoman.getGeomanDrawLayers().length).to.eq(1); }); // Create a new marker after dragging with clicking on the icon of a marker cy.get(mapSelector).click(170, 290); cy.window().then(({ map }) => { - expect(map.pm.getGeomanDrawLayers().length).to.eq(2); + expect(map.geoman.getGeomanDrawLayers().length).to.eq(2); }); }); }); diff --git a/cypress/e2e/options.cy.js b/cypress/e2e/options.cy.js index 795cf5d5..3d4378d8 100644 --- a/cypress/e2e/options.cy.js +++ b/cypress/e2e/options.cy.js @@ -17,7 +17,7 @@ describe('Options', () => { let l; map.eachLayer((layer) => { if (layer instanceof L.Polygon) { - layer.pm.enable(); + layer.geoman.enable(); l = layer; } }); @@ -33,31 +33,31 @@ describe('Options', () => { cy.toolbarButton('edit').click(); cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ pinning: false, snappable: false, }); }); cy.get('@poly').then((poly) => { - expect(poly.pm.options.snappable).to.equal(false); + expect(poly.geoman.options.snappable).to.equal(false); }); cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ pinning: true, snappable: true, }); }); cy.get('@poly').then((poly) => { - expect(poly.pm.options.snappable).to.equal(true); + expect(poly.geoman.options.snappable).to.equal(true); }); }); it('global options work on Draw', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ snappable: false, }); }); @@ -67,7 +67,7 @@ describe('Options', () => { cy.get(mapSelector).click(300, 100); cy.window().then(({ map }) => { - expect(map.pm.Draw.Marker.options.snappable).to.equal(false); + expect(map.geoman.Draw.Marker.options.snappable).to.equal(false); }); // cy.get(mapSelector) @@ -102,45 +102,49 @@ describe('Options', () => { it('merge PathOptions', () => { cy.window().then(({ map }) => { - map.pm.setPathOptions({ + map.geoman.setPathOptions({ color: 'red', }); - expect(map.pm.Draw.Polyline.options.pathOptions.color).to.equal('red'); - expect(map.pm.Draw.Polyline.options.pathOptions.borderColor).to.equal( + expect(map.geoman.Draw.Polyline.options.pathOptions.color).to.equal( + 'red' + ); + expect(map.geoman.Draw.Polyline.options.pathOptions.borderColor).to.equal( undefined ); - map.pm.setPathOptions({ + map.geoman.setPathOptions({ borderColor: 'green', }); - expect(map.pm.Draw.Polyline.options.pathOptions.color).to.equal( + expect(map.geoman.Draw.Polyline.options.pathOptions.color).to.equal( undefined ); - expect(map.pm.Draw.Polyline.options.pathOptions.borderColor).to.equal( + expect(map.geoman.Draw.Polyline.options.pathOptions.borderColor).to.equal( 'green' ); - map.pm.setPathOptions( + map.geoman.setPathOptions( { color: 'red', }, { merge: true } ); - expect(map.pm.Draw.Polyline.options.pathOptions.color).to.equal('red'); - expect(map.pm.Draw.Polyline.options.pathOptions.borderColor).to.equal( + expect(map.geoman.Draw.Polyline.options.pathOptions.color).to.equal( + 'red' + ); + expect(map.geoman.Draw.Polyline.options.pathOptions.borderColor).to.equal( 'green' ); }); }); - it('fires `pm:globaloptionschanged`', () => { + it('fires `geoman:globaloptionschanged`', () => { cy.window().then(({ map }) => { let fired = false; - map.on('pm:globaloptionschanged', () => { + map.on('geoman:globaloptionschanged', () => { fired = true; }); - map.pm.setGlobalOptions({ snapSegment: false }); + map.geoman.setGlobalOptions({ snapSegment: false }); expect(fired).to.equal(true); }); diff --git a/cypress/e2e/polygon.cy.js b/cypress/e2e/polygon.cy.js index a10fce6b..602c6800 100644 --- a/cypress/e2e/polygon.cy.js +++ b/cypress/e2e/polygon.cy.js @@ -22,7 +22,7 @@ describe('Draw & Edit Poly', () => { cy.toolbarButton('edit').click(); }); - it('works without pmIgnore', () => { + it('works without geomanIgnore', () => { cy.window().then(({ Geoman }) => { Geoman.setOptIn(false); cy.drawShape('MultiPolygon'); @@ -33,7 +33,7 @@ describe('Draw & Edit Poly', () => { cy.hasVertexMarkers(8); }); - it('respects pmIgnore', () => { + it('respects geomanIgnore', () => { cy.window().then(({ Geoman }) => { Geoman.setOptIn(false); cy.drawShape('MultiPolygon', true); @@ -70,10 +70,10 @@ describe('Draw & Edit Poly', () => { cy.hasDrawnLayers(1); }); - it('pmIgnore:true disable editing', () => { + it('geomanIgnore:true disable editing', () => { cy.window().then(({ map }) => { - map.on('pm:create', (e) => { - e.layer.options.pmIgnore = true; + map.on('geoman:create', (e) => { + e.layer.options.geomanIgnore = true; }); }); @@ -90,10 +90,10 @@ describe('Draw & Edit Poly', () => { cy.hasVertexMarkers(0); }); - it('pmIgnore:true disable deleting', () => { + it('geomanIgnore:true disable deleting', () => { cy.window().then(({ map }) => { - map.on('pm:create', (e) => { - e.layer.options.pmIgnore = true; + map.on('geoman:create', (e) => { + e.layer.options.geomanIgnore = true; }); }); @@ -111,7 +111,7 @@ describe('Draw & Edit Poly', () => { cy.hasDrawnLayers(1); }); - it('respects pmIgnore with optIn', () => { + it('respects geomanIgnore with optIn', () => { cy.window().then(({ Geoman }) => { Geoman.setOptIn(true); cy.drawShape('MultiPolygon', false); @@ -136,21 +136,21 @@ describe('Draw & Edit Poly', () => { cy.hasVertexMarkers(8); }); - it('respects optIn and reinit layer with pmIgnore', () => { + it('respects optIn and reinit layer with geomanIgnore', () => { cy.window().then(({ Geoman }) => { Geoman.setOptIn(true); cy.drawShape('MultiPolygon', true).then((poly) => { cy.hasVertexMarkers(0); // Not allowed because optIn - Geoman.reInitLayer(poly); // Not allowed because pmIgnore is not false + Geoman.reInitLayer(poly); // Not allowed because geomanIgnore is not false cy.hasVertexMarkers(0); Geoman.setOptIn(false); - Geoman.reInitLayer(poly); // Not allowed because pmIgnore is true + Geoman.reInitLayer(poly); // Not allowed because geomanIgnore is true cy.hasVertexMarkers(0); - poly.options.pmIgnore = false; + poly.options.geomanIgnore = false; poly.eachLayer((layer) => { - layer.options.pmIgnore = false; + layer.options.geomanIgnore = false; }); - Geoman.reInitLayer(poly); // Allowed because pmIgnore is not true + Geoman.reInitLayer(poly); // Allowed because geomanIgnore is not true }); }); cy.toolbarButton('edit').click(); @@ -212,15 +212,15 @@ describe('Draw & Edit Poly', () => { it('removes layer when cut completely', () => { cy.window().then(({ map }) => { - map.on('pm:create', ({ layer }) => { + map.on('geoman:create', ({ layer }) => { layer.options.cypress = true; }); - map.on('pm:cut', ({ layer }) => { + map.on('geoman:cut', ({ layer }) => { expect(Object.keys(layer.getLayers())).to.have.lengthOf(0); }); - map.on('pm:remove', ({ layer }) => { + map.on('geoman:remove', ({ layer }) => { /* eslint no-unused-expressions: 0 */ expect(layer._map).to.be.null; expect(layer.options.cypress).to.equal(true); @@ -249,18 +249,18 @@ describe('Draw & Edit Poly', () => { it('prevents self intersections', () => { let intersectEventCalled = false; cy.window().then(({ map }) => { - map.pm.enableDraw('Polygon', { + map.geoman.enableDraw('Polygon', { allowSelfIntersection: false, }); - map.on('pm:create', (event) => { + map.on('geoman:create', (event) => { const poly = event.layer; - poly.pm.enable({ + poly.geoman.enable({ allowSelfIntersection: false, }); }); - map.on('pm:intersect', () => { + map.on('geoman:intersect', () => { intersectEventCalled = true; }); }); @@ -301,7 +301,7 @@ describe('Draw & Edit Poly', () => { it('doesnt break on dblclick while self intersection disabled', () => { cy.window().then(({ map }) => { - map.pm.enableDraw('Polygon', { + map.geoman.enableDraw('Polygon', { allowSelfIntersection: false, }); }); @@ -322,7 +322,7 @@ describe('Draw & Edit Poly', () => { it('create vertex when dblclick', () => { cy.window().then(({ map }) => { - map.pm.enableDraw('Polygon', { + map.geoman.enableDraw('Polygon', { allowSelfIntersection: false, finishOn: 'dblclick', }); @@ -343,7 +343,7 @@ describe('Draw & Edit Poly', () => { it('prevent creation while self intersection', () => { cy.window().then(({ map }) => { - map.pm.enableDraw('Polygon', { + map.geoman.enableDraw('Polygon', { allowSelfIntersection: false, }); }); @@ -372,7 +372,7 @@ describe('Draw & Edit Poly', () => { cy.hasVertexMarkers(5); cy.window().then(({ map }) => { - map.pm.Draw.Polygon._removeLastVertex(); + map.geoman.Draw.Polygon._removeLastVertex(); }); cy.hasVertexMarkers(4); @@ -407,7 +407,7 @@ describe('Draw & Edit Poly', () => { let l; map.eachLayer((layer) => { if (layer instanceof L.Polygon) { - layer.pm.enable(); + layer.geoman.enable(); l = layer; } }); @@ -419,7 +419,7 @@ describe('Draw & Edit Poly', () => { }); cy.get('@poly').then((poly) => { - poly.on('pm:vertexadded', ({ layer, indexPath, latlng }) => { + poly.on('geoman:vertexadded', ({ layer, indexPath, latlng }) => { const newLatLng = Cypress._.get(layer._latlngs, indexPath); expect(latlng.lat).to.equal(newLatLng.lat); expect(latlng.lng).to.equal(newLatLng.lng); @@ -439,16 +439,16 @@ describe('Draw & Edit Poly', () => { it('events to be called', () => { cy.window().then(({ map }) => { - // test pm:create event - map.on('pm:create', ({ layer }) => { + // test geoman:create event + map.on('geoman:create', ({ layer }) => { const poly = layer; - poly.pm.enable(); + poly.geoman.enable(); - const markers = poly.pm._markers[0]; + const markers = poly.geoman._markers[0]; expect(markers).to.have.length(4); }); - map.on('pm:remove', ({ layer }) => { + map.on('geoman:remove', ({ layer }) => { expect(layer.map).to.be.undefined; }); }); @@ -459,7 +459,7 @@ describe('Draw & Edit Poly', () => { .closest('.leaflet-geoman-button-container') .should('have.class', 'leaflet-geoman-active'); - // draw a polygon - triggers the event pm:create + // draw a polygon - triggers the event geoman:create cy.get(mapSelector) .click(90, 250) .click(100, 50) @@ -542,9 +542,9 @@ describe('Draw & Edit Poly', () => { .should('have.not.class', 'leaflet-geoman-active'); }); - it('fire pm:cut AFTER the actual cut is visible on the map', () => { + it('fire geoman:cut AFTER the actual cut is visible on the map', () => { cy.window().then(({ map, L }) => { - map.on('pm:cut', () => { + map.on('geoman:cut', () => { const layers = []; map.eachLayer((layer) => { @@ -694,11 +694,11 @@ describe('Draw & Edit Poly', () => { cy.get('@poly').then((poly) => { let handFinish = false; - expect(poly.pm.hasSelfIntersection()).to.equal(true); + expect(poly.geoman.hasSelfIntersection()).to.equal(true); const handSelfIntersectionFalse = new Hand({ timing: 'frame', onStop() { - expect(poly.pm.hasSelfIntersection()).to.equal(false); + expect(poly.geoman.hasSelfIntersection()).to.equal(false); // Map shouldn't be dragged const center = map.getCenter(); @@ -710,7 +710,7 @@ describe('Draw & Edit Poly', () => { const handSelfIntersectionTrue = new Hand({ timing: 'frame', onStop() { - expect(poly.pm.hasSelfIntersection()).to.equal(true); + expect(poly.geoman.hasSelfIntersection()).to.equal(true); const toucherSelfIntersectionFalse = handSelfIntersectionFalse.growFinger('pointer'); @@ -734,7 +734,7 @@ describe('Draw & Edit Poly', () => { cy.wait(1000); - map.pm.enableGlobalEditMode({ + map.geoman.enableGlobalEditMode({ allowSelfIntersection: false, allowSelfIntersectionEdit: true, }); @@ -817,7 +817,7 @@ describe('Draw & Edit Poly', () => { it('enable continueDrawing', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ continueDrawing: true }); + map.geoman.setGlobalOptions({ continueDrawing: true }); }); cy.toolbarButton('polygon').click(); @@ -836,7 +836,7 @@ describe('Draw & Edit Poly', () => { .click(230, 230); cy.window().then(({ map }) => { - const latlng = map.pm.Draw.Polygon._hintMarker.getLatLng(); + const latlng = map.geoman.Draw.Polygon._hintMarker.getLatLng(); const pxLatLng = map.containerPointToLatLng([230, 230]); expect(pxLatLng).to.deep.equal(latlng); }); @@ -848,7 +848,7 @@ describe('Draw & Edit Poly', () => { it('pane support', () => { cy.window().then(({ map }) => { map.createPane('draw'); - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ panes: { layerPane: 'draw', vertexPane: 'draw' }, }); }); @@ -864,14 +864,14 @@ describe('Draw & Edit Poly', () => { cy.window().then(({ map }) => { const drawPane = map._panes.draw; - const polygon = map.pm.getGeomanDrawLayers()[0]; + const polygon = map.geoman.getGeomanDrawLayers()[0]; expect(drawPane.className).to.eq(polygon.getPane().className); }); }); it('disable snapping on segment', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ snapSegment: false }); + map.geoman.setGlobalOptions({ snapSegment: false }); }); cy.toolbarButton('polygon').click(); @@ -886,7 +886,7 @@ describe('Draw & Edit Poly', () => { cy.get(mapSelector).click(350, 250).click(190, 60); cy.window().then(({ map }) => { - const lastLatLng = map.pm.Draw.Polygon._layer.getLatLngs()[1]; + const lastLatLng = map.geoman.Draw.Polygon._layer.getLatLngs()[1]; const point = map.latLngToContainerPoint(lastLatLng); expect(point.y).to.eq(60); }); @@ -894,7 +894,7 @@ describe('Draw & Edit Poly', () => { it('finishOn snap', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ finishOn: 'snap' }); + map.geoman.setGlobalOptions({ finishOn: 'snap' }); }); cy.toolbarButton('polygon').click(); @@ -909,20 +909,20 @@ describe('Draw & Edit Poly', () => { cy.get(mapSelector).click(350, 250).click(190, 90).click(250, 50); cy.window().then(({ map }) => { - expect(2).to.eq(map.pm.getGeomanDrawLayers().length); + expect(2).to.eq(map.geoman.getGeomanDrawLayers().length); }); cy.toolbarButton('delete').click(); cy.get(mapSelector).click(160, 50); cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); }); }); it('requireSnapToFinish', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ requireSnapToFinish: true, snapSegment: false, }); @@ -939,15 +939,15 @@ describe('Draw & Edit Poly', () => { cy.get(mapSelector).click(350, 250).click(190, 160).click(190, 60); cy.window().then(({ map }) => { - map.pm.Draw.Polygon._finishShape(); - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); + map.geoman.Draw.Polygon._finishShape(); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); }); cy.get(mapSelector).click(250, 50); cy.window().then(({ map }) => { - map.pm.Draw.Polygon._finishShape(); - expect(2).to.eq(map.pm.getGeomanDrawLayers().length); + map.geoman.Draw.Polygon._finishShape(); + expect(2).to.eq(map.geoman.getGeomanDrawLayers().length); }); }); @@ -960,14 +960,14 @@ describe('Draw & Edit Poly', () => { .click(150, 250); cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ allowEditing: false }); + map.geoman.setGlobalOptions({ allowEditing: false }); }); cy.toolbarButton('edit').click(); cy.get(mapSelector).rightclick(160, 50); cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); }); }); @@ -980,14 +980,14 @@ describe('Draw & Edit Poly', () => { .click(150, 250); cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ allowRemoval: false }); + map.geoman.setGlobalOptions({ allowRemoval: false }); }); cy.toolbarButton('delete').click(); cy.get(mapSelector).click(160, 50); cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); }); }); @@ -1000,15 +1000,15 @@ describe('Draw & Edit Poly', () => { .click(150, 250); cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ draggable: false }); + map.geoman.setGlobalOptions({ draggable: false }); }); cy.toolbarButton('drag').click(); cy.get(mapSelector).click(160, 50); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; - expect(layer.pm._safeToCacheDragState).to.eq(undefined); + const layer = map.geoman.getGeomanDrawLayers()[0]; + expect(layer.geoman._safeToCacheDragState).to.eq(undefined); }); }); @@ -1022,8 +1022,8 @@ describe('Draw & Edit Poly', () => { let layer; cy.window().then(({ map }) => { - [layer] = map.pm.getGeomanDrawLayers(); - map.pm.setGlobalOptions({ allowCutting: false }); + [layer] = map.geoman.getGeomanDrawLayers(); + map.geoman.setGlobalOptions({ allowCutting: false }); }); cy.toolbarButton('cut').click(); @@ -1034,7 +1034,7 @@ describe('Draw & Edit Poly', () => { .click(180, 230); cy.window().then(({ map }) => { - const layer2 = map.pm.getGeomanDrawLayers()[0]; + const layer2 = map.geoman.getGeomanDrawLayers()[0]; expect(layer).to.eq(layer2); }); }); @@ -1048,7 +1048,7 @@ describe('Draw & Edit Poly', () => { .click(150, 250); cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ allowRotation: false }); + map.geoman.setGlobalOptions({ allowRotation: false }); }); cy.toolbarButton('rotate').click(); @@ -1065,9 +1065,9 @@ describe('Draw & Edit Poly', () => { let layer; cy.window().then(({ map }) => { - const cutlayer = map.pm.getGeomanDrawLayers()[0]; - [, layer] = map.pm.getGeomanDrawLayers(); - map.pm.enableDraw('Cut', { layersToCut: [cutlayer] }); + const cutlayer = map.geoman.getGeomanDrawLayers()[0]; + [, layer] = map.geoman.getGeomanDrawLayers(); + map.geoman.enableDraw('Cut', { layersToCut: [cutlayer] }); }); cy.get(mapSelector) @@ -1094,7 +1094,7 @@ describe('Draw & Edit Poly', () => { }); it('addVertexOn contextmenu / removeVertexOn click', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ addVertexOn: 'contextmenu', removeVertexOn: 'click', }); @@ -1127,7 +1127,7 @@ describe('Draw & Edit Poly', () => { it('addVertexValidation / removeVertexValidation', () => { cy.window().then(({ map }) => { const check = ({ layer }) => layer._valid; - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ addVertexValidation: check, removeVertexValidation: check, }); @@ -1151,7 +1151,7 @@ describe('Draw & Edit Poly', () => { cy.hasVertexMarkers(3); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; + const layer = map.geoman.getGeomanDrawLayers()[0]; layer._valid = true; }); @@ -1253,8 +1253,8 @@ describe('Draw & Edit Poly', () => { cy.get(mapSelector).click(150, 150).click(450, 150).click(450, 400); cy.window().then(({ map }) => { - const polygon = map.pm.Draw.Polygon._layer; - expect(polygon.pm.getShape()).to.equal('Polygon'); + const polygon = map.geoman.Draw.Polygon._layer; + expect(polygon.geoman.getShape()).to.equal('Polygon'); }); }); @@ -1272,10 +1272,13 @@ describe('Draw & Edit Poly', () => { const style = { color: 'red', }; - map.pm.setGlobalOptions({ templineStyle: style, hintlineStyle: style }); + map.geoman.setGlobalOptions({ + templineStyle: style, + hintlineStyle: style, + }); - const layer = map.pm.Draw.Polygon._layer; - const hintLine = map.pm.Draw.Polygon._hintline; + const layer = map.geoman.Draw.Polygon._layer; + const hintLine = map.geoman.Draw.Polygon._hintline; expect(layer.options.color).to.eql('red'); expect(hintLine.options.color).to.eql('red'); }); @@ -1297,26 +1300,26 @@ describe('Draw & Edit Poly', () => { map.fitBounds(polygon.getBounds(), { animate: false }); map.setZoom(8, { animate: false }); - map.pm.enableDraw('Polygon'); + map.geoman.enableDraw('Polygon'); - map.pm.Draw.Polygon._hintMarker.setLatLng([ + map.geoman.Draw.Polygon._hintMarker.setLatLng([ 20.53837097209846, 72.22334801861803, ]); - map.pm.Draw.Polygon._createVertex({ + map.geoman.Draw.Polygon._createVertex({ latlng: [20.53837097209846, 72.22334801861803], }); - map.pm.Draw.Polygon._hintMarker.setLatLng([ + map.geoman.Draw.Polygon._hintMarker.setLatLng([ 20.21581109239457, 72.13073730468751, ]); - map.pm.Draw.Polygon._createVertex({ + map.geoman.Draw.Polygon._createVertex({ latlng: [20.21581109239457, 72.13073730468751], }); - map.pm.Draw.Polygon._hintMarker.setLatLng([ + map.geoman.Draw.Polygon._hintMarker.setLatLng([ 20.205501205844214, 72.77893066406251, ]); - map.pm.Draw.Polygon._createVertex({ + map.geoman.Draw.Polygon._createVertex({ latlng: [20.205501205844214, 72.77893066406251], }); }); @@ -1324,7 +1327,7 @@ describe('Draw & Edit Poly', () => { cy.get(mapSelector).trigger('pointermove', 413, 180); cy.window().then(({ map }) => { - const hintMarker = map.pm.Draw.Polygon._hintMarker; + const hintMarker = map.geoman.Draw.Polygon._hintMarker; expect(hintMarker.getLatLng().lat).to.eq(20.53837097209846); expect(hintMarker.getLatLng().lng).to.eq(72.22334801861803); }); @@ -1332,7 +1335,7 @@ describe('Draw & Edit Poly', () => { it('prevents removal of the layer if the vertex count is below minimum (removeLayerBelowMinVertexCount)', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ removeLayerBelowMinVertexCount: false }); + map.geoman.setGlobalOptions({ removeLayerBelowMinVertexCount: false }); }); // activate polygon drawing @@ -1368,7 +1371,7 @@ describe('Draw & Edit Poly', () => { it('allows to remove the hole when removeLayerBelowMinVertexCount is false', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ removeLayerBelowMinVertexCount: false }); + map.geoman.setGlobalOptions({ removeLayerBelowMinVertexCount: false }); }); // activate polygon drawing @@ -1420,7 +1423,7 @@ describe('Draw & Edit Poly', () => { it("doesn't snap to the vertex", () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ snapVertex: false }); + map.geoman.setGlobalOptions({ snapVertex: false }); }); cy.toolbarButton('polygon') @@ -1446,7 +1449,7 @@ describe('Draw & Edit Poly', () => { .click(150, 60); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[1]; + const layer = map.geoman.getGeomanDrawLayers()[1]; expect(layer.getLatLngs()[0][0].lat).to.eq(51.5255134425896); expect(layer.getLatLngs()[0][0].lng).to.eq(-0.15071868896484378); }); @@ -1459,7 +1462,7 @@ describe('Draw & Edit Poly', () => { .trigger('pointerup', 150, 55, { which: 1 }); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[1]; + const layer = map.geoman.getGeomanDrawLayers()[1]; expect(layer.getLatLngs()[0][0].lat).to.eq(51.52594064813257); expect(layer.getLatLngs()[0][0].lng).to.eq(-0.15037536621093753); }); diff --git a/cypress/e2e/polyline.cy.js b/cypress/e2e/polyline.cy.js index ccd1a513..1566151e 100644 --- a/cypress/e2e/polyline.cy.js +++ b/cypress/e2e/polyline.cy.js @@ -16,8 +16,8 @@ describe('Draw & Edit Polyline', () => { it('removes last vertex', () => { let eventCalled = false; cy.window().then(({ map }) => { - map.on('pm:drawstart', (e) => { - e.workingLayer.on('pm:vertexremoved', () => { + map.on('geoman:drawstart', (e) => { + e.workingLayer.on('geoman:vertexremoved', () => { eventCalled = true; }); }); @@ -51,8 +51,8 @@ describe('Draw & Edit Polyline', () => { it('respects custom style', () => { cy.window().then(({ map }) => { - map.on('pm:create', (e) => { - e.layer.pm.enable({ + map.on('geoman:create', (e) => { + e.layer.geoman.enable({ allowSelfIntersection: false, snappable: false, snapDistance: 20, @@ -61,7 +61,7 @@ describe('Draw & Edit Polyline', () => { e.layer.setStyle({ color: 'black' }); }); - map.pm.enableDraw('Polygon', { + map.geoman.enableDraw('Polygon', { snappable: false, snapDistance: 20, allowSelfIntersection: true, @@ -189,7 +189,7 @@ describe('Draw & Edit Polyline', () => { .click(150, 250); cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ hideMiddleMarkers: true }); + map.geoman.setGlobalOptions({ hideMiddleMarkers: true }); }); cy.toolbarButton('edit').click(); @@ -199,7 +199,7 @@ describe('Draw & Edit Polyline', () => { it('enable continueDrawing', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ continueDrawing: true }); + map.geoman.setGlobalOptions({ continueDrawing: true }); }); cy.toolbarButton('polyline').click(); @@ -214,7 +214,7 @@ describe('Draw & Edit Polyline', () => { cy.get(mapSelector).click(200, 200).click(250, 250).click(250, 250); cy.window().then(({ map }) => { - const latlng = map.pm.Draw.Polyline._hintMarker.getLatLng(); + const latlng = map.geoman.Draw.Polyline._hintMarker.getLatLng(); const pxLatLng = map.containerPointToLatLng([250, 250]); expect(pxLatLng).to.deep.equal(latlng); }); @@ -249,7 +249,7 @@ describe('Draw & Edit Polyline', () => { cy.hasMiddleMarkers(6); cy.window().then(({ map }) => { - const layers = map.pm.getGeomanDrawLayers(); + const layers = map.geoman.getGeomanDrawLayers(); expect(layers.length).to.eq(1); expect(layers[0].getLatLngs().length).to.eq(4); }); @@ -257,7 +257,7 @@ describe('Draw & Edit Polyline', () => { it('requireSnapToFinish', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ requireSnapToFinish: true, snapSegment: false, }); @@ -274,15 +274,15 @@ describe('Draw & Edit Polyline', () => { cy.get(mapSelector).click(350, 250).click(190, 160).click(190, 60); cy.window().then(({ map }) => { - map.pm.Draw.Polyline._finishShape(); - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); + map.geoman.Draw.Polyline._finishShape(); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); }); cy.get(mapSelector).click(250, 50); cy.window().then(({ map }) => { - map.pm.Draw.Polyline._finishShape(); - expect(2).to.eq(map.pm.getGeomanDrawLayers().length); + map.geoman.Draw.Polyline._finishShape(); + expect(2).to.eq(map.geoman.getGeomanDrawLayers().length); }); }); @@ -309,7 +309,7 @@ describe('Draw & Edit Polyline', () => { cy.hasLayers(7); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; + const layer = map.geoman.getGeomanDrawLayers()[0]; layer.remove(); }); cy.hasLayers(2); @@ -329,10 +329,13 @@ describe('Draw & Edit Polyline', () => { const style = { color: 'red', }; - map.pm.setGlobalOptions({ templineStyle: style, hintlineStyle: style }); + map.geoman.setGlobalOptions({ + templineStyle: style, + hintlineStyle: style, + }); - const layer = map.pm.Draw.Polyline._layer; - const hintLine = map.pm.Draw.Polyline._hintline; + const layer = map.geoman.Draw.Polyline._layer; + const hintLine = map.geoman.Draw.Polyline._hintline; expect(layer.options.color).to.eql('red'); expect(hintLine.options.color).to.eql('red'); }); @@ -390,7 +393,7 @@ describe('Draw & Edit Polyline', () => { it('prevents removal of the layer if the vertex count is below minimum (removeLayerBelowMinVertexCount)', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ removeLayerBelowMinVertexCount: false }); + map.geoman.setGlobalOptions({ removeLayerBelowMinVertexCount: false }); }); // activate polyline drawing @@ -420,7 +423,7 @@ describe('Draw & Edit Polyline', () => { it("doesn't snap to the vertex", () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ snapVertex: false }); + map.geoman.setGlobalOptions({ snapVertex: false }); }); // activate polyline drawing @@ -442,7 +445,7 @@ describe('Draw & Edit Polyline', () => { cy.get(mapSelector).click(150, 60).click(250, 50).click(250, 50); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[1]; + const layer = map.geoman.getGeomanDrawLayers()[1]; expect(layer.getLatLngs()[0].lat).to.eq(51.52538802368748); expect(layer.getLatLngs()[0].lng).to.eq(-0.15050450596240997); }); @@ -455,7 +458,7 @@ describe('Draw & Edit Polyline', () => { .trigger('pointerup', 150, 55, { eventConstructor: 'PointerEvent' }); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[1]; + const layer = map.geoman.getGeomanDrawLayers()[1]; expect(layer.getLatLngs()[0].lat).to.eq(51.5258877375718); expect(layer.getLatLngs()[0].lng).to.eq(-0.15026355008465944); }); diff --git a/cypress/e2e/rectangle.cy.js b/cypress/e2e/rectangle.cy.js index 71c75d1c..2176ff37 100644 --- a/cypress/e2e/rectangle.cy.js +++ b/cypress/e2e/rectangle.cy.js @@ -59,7 +59,7 @@ describe('Draw Rectangle', () => { }); cy.get('@marker').then((marker) => { - expect(marker._pmTempLayer).to.equal(true); + expect(marker._geomanTempLayer).to.equal(true); expect(marker.options.draggable).to.equal(false); }); }); @@ -119,7 +119,7 @@ describe('Draw Rectangle', () => { cy.get(mapSelector).rightclick(300, 250); cy.window().then(({ map }) => { - const rect = map.pm.getGeomanDrawLayers()[0]; + const rect = map.geoman.getGeomanDrawLayers()[0]; expect(rect.options.color).to.not.equal('#f00000ff'); }); }); @@ -141,7 +141,7 @@ describe('Draw Rectangle', () => { cy.get(mapSelector).rightclick(300, 250); cy.window().then(({ map }) => { - const rect = map.pm.getGeomanDrawLayers()[0]; + const rect = map.geoman.getGeomanDrawLayers()[0]; const geojson = rect.toGeoJSON(); const coords = geojson.geometry.coordinates; expect(coords.length).to.equal(1); @@ -150,7 +150,7 @@ describe('Draw Rectangle', () => { it('enable continueDrawing', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ continueDrawing: true }); + map.geoman.setGlobalOptions({ continueDrawing: true }); }); cy.toolbarButton('rectangle').click(); @@ -159,7 +159,7 @@ describe('Draw Rectangle', () => { cy.get(mapSelector).click(230, 230).click(350, 350); cy.window().then(({ map }) => { - const latlng = map.pm.Draw.Rectangle._hintMarker.getLatLng(); + const latlng = map.geoman.Draw.Rectangle._hintMarker.getLatLng(); const pxLatLng = map.containerPointToLatLng([350, 350]); expect(pxLatLng).to.deep.equal(latlng); }); @@ -171,7 +171,7 @@ describe('Draw Rectangle', () => { it('disable popup on layer while drawing', () => { let rect = null; cy.window().then(({ map, L }) => { - map.on('pm:create', (e) => { + map.on('geoman:create', (e) => { e.layer.bindPopup('Popup test'); if (e.layer instanceof L.Rectangle) { rect = e.layer; @@ -188,7 +188,7 @@ describe('Draw Rectangle', () => { cy.toolbarButton('edit').click(); cy.window().then(({ map }) => { - const len = map.pm.getGeomanDrawLayers().length; + const len = map.geoman.getGeomanDrawLayers().length; expect(len).to.equal(2); const text = rect.getPopup().getContent(); @@ -196,13 +196,13 @@ describe('Draw Rectangle', () => { }); }); - it('disable popup on pmIgnore-layer while drawing', () => { + it('disable popup on geomanIgnore-layer while drawing', () => { let rect = null; cy.window().then(({ map, L }) => { - map.on('pm:create', (e) => { + map.on('geoman:create', (e) => { e.layer.bindPopup('Popup test'); if (e.layer instanceof L.Rectangle) { - e.layer.options.pmIgnore = true; + e.layer.options.geomanIgnore = true; rect = e.layer; } }); @@ -217,7 +217,7 @@ describe('Draw Rectangle', () => { cy.toolbarButton('edit').click(); cy.window().then(({ map }) => { - const len = map.pm.getGeomanDrawLayers().length; + const len = map.geoman.getGeomanDrawLayers().length; expect(len).to.equal(1); const text = rect.getPopup().getContent(); @@ -227,7 +227,7 @@ describe('Draw Rectangle', () => { it('prevent not correct created snaplist', () => { cy.window().then(({ map }) => { - map.on('pm:create', (e) => { + map.on('geoman:create', (e) => { map.removeLayer(e.layer); map.addLayer(e.layer); }); @@ -241,11 +241,11 @@ describe('Draw Rectangle', () => { cy.get(mapSelector).click(200, 200).click(400, 350); cy.window().then(({ map }) => { - expect(map.pm.Draw.Rectangle._snapList).to.equal(undefined); + expect(map.geoman.Draw.Rectangle._snapList).to.equal(undefined); }); }); - it('make layer snappable with pmIgnore', () => { + it('make layer snappable with geomanIgnore', () => { // create snapping layer cy.toolbarButton('rectangle') .click() @@ -254,19 +254,19 @@ describe('Draw Rectangle', () => { cy.get(mapSelector).click(200, 200).click(400, 350); - // test 1: snapIgnore: undefined, pmIgnore: undefined, optIn: false --> snappable + // test 1: snapIgnore: undefined, geomanIgnore: undefined, optIn: false --> snappable cy.toolbarButton('rectangle').click(); // click or pointermove is needed to init snapList cy.get(mapSelector).click(200, 100); let layer; cy.window().then(({ map }) => { - expect(map.pm.Draw.Rectangle._snapList.length).to.equal(1); - map.pm.disableDraw(); - [layer] = map.pm.getGeomanDrawLayers(); + expect(map.geoman.Draw.Rectangle._snapList.length).to.equal(1); + map.geoman.disableDraw(); + [layer] = map.geoman.getGeomanDrawLayers(); }); - // test 2: snapIgnore: true, pmIgnore: undefined, optIn: false --> not snappable + // test 2: snapIgnore: true, geomanIgnore: undefined, optIn: false --> not snappable cy.window().then(() => { layer.options.snapIgnore = true; }); @@ -275,42 +275,42 @@ describe('Draw Rectangle', () => { cy.get(mapSelector).click(200, 100); cy.window().then(({ map }) => { - expect(map.pm.Draw.Rectangle._snapList.length).to.equal(0); - map.pm.disableDraw(); + expect(map.geoman.Draw.Rectangle._snapList.length).to.equal(0); + map.geoman.disableDraw(); }); - // test 3: snapIgnore: false, pmIgnore: true, optIn: false --> snappable + // test 3: snapIgnore: false, geomanIgnore: true, optIn: false --> snappable cy.window().then(() => { layer.options.snapIgnore = false; - layer.options.pmIgnore = true; + layer.options.geomanIgnore = true; }); cy.toolbarButton('rectangle').click(); // click or pointermove is needed to init snapList cy.get(mapSelector).click(200, 100); cy.window().then(({ map }) => { - expect(map.pm.Draw.Rectangle._snapList.length).to.equal(1); - map.pm.disableDraw(); + expect(map.geoman.Draw.Rectangle._snapList.length).to.equal(1); + map.geoman.disableDraw(); }); - // test 4: snapIgnore: undefined, pmIgnore: true, optIn: false --> not snappable + // test 4: snapIgnore: undefined, geomanIgnore: true, optIn: false --> not snappable cy.window().then(() => { delete layer.options.snapIgnore; - layer.options.pmIgnore = true; + layer.options.geomanIgnore = true; }); cy.toolbarButton('rectangle').click(); // click or pointermove is needed to init snapList cy.get(mapSelector).click(200, 100); cy.window().then(({ map }) => { - expect(map.pm.Draw.Rectangle._snapList.length).to.equal(0); - map.pm.disableDraw(); + expect(map.geoman.Draw.Rectangle._snapList.length).to.equal(0); + map.geoman.disableDraw(); }); - // test 5: snapIgnore: undefined, pmIgnore: false, optIn: true --> snappable + // test 5: snapIgnore: undefined, geomanIgnore: false, optIn: true --> snappable cy.window().then(({ Geoman }) => { delete layer.options.snapIgnore; - layer.options.pmIgnore = false; + layer.options.geomanIgnore = false; Geoman.setOptIn(true); }); cy.toolbarButton('rectangle').click(); @@ -318,13 +318,13 @@ describe('Draw Rectangle', () => { cy.get(mapSelector).click(200, 100); cy.window().then(({ map }) => { - expect(map.pm.Draw.Rectangle._snapList.length).to.equal(1); - map.pm.disableDraw(); + expect(map.geoman.Draw.Rectangle._snapList.length).to.equal(1); + map.geoman.disableDraw(); }); - // test 6: snapIgnore: undefined, pmIgnore: true, optIn: true --> not snappable + // test 6: snapIgnore: undefined, geomanIgnore: true, optIn: true --> not snappable cy.window().then(({ Geoman }) => { - layer.options.pmIgnore = true; + layer.options.geomanIgnore = true; Geoman.setOptIn(true); }); cy.toolbarButton('rectangle').click(); @@ -332,11 +332,11 @@ describe('Draw Rectangle', () => { cy.get(mapSelector).click(200, 100); cy.window().then(({ map }) => { - expect(map.pm.Draw.Rectangle._snapList.length).to.equal(0); - map.pm.disableDraw(); + expect(map.geoman.Draw.Rectangle._snapList.length).to.equal(0); + map.geoman.disableDraw(); }); - // test 7: snapIgnore: false, pmIgnore: true, optIn: true --> snappable + // test 7: snapIgnore: false, geomanIgnore: true, optIn: true --> snappable cy.window().then(() => { layer.options.snapIgnore = false; }); @@ -345,14 +345,14 @@ describe('Draw Rectangle', () => { cy.get(mapSelector).click(200, 100); cy.window().then(({ map }) => { - expect(map.pm.Draw.Rectangle._snapList.length).to.equal(1); - map.pm.disableDraw(); + expect(map.geoman.Draw.Rectangle._snapList.length).to.equal(1); + map.geoman.disableDraw(); }); }); it('requireSnapToFinish', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ requireSnapToFinish: true, snapSegment: false, }); @@ -369,19 +369,19 @@ describe('Draw Rectangle', () => { cy.get(mapSelector).click(350, 250).click(190, 60); cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); }); cy.get(mapSelector).click(250, 50); cy.window().then(({ map }) => { - expect(2).to.eq(map.pm.getGeomanDrawLayers().length); + expect(2).to.eq(map.geoman.getGeomanDrawLayers().length); }); }); it('requireSnapToFinish not applied for first layer', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ + map.geoman.setGlobalOptions({ requireSnapToFinish: true, snapSegment: false, }); @@ -391,14 +391,14 @@ describe('Draw Rectangle', () => { cy.get(mapSelector).click(350, 250).click(190, 60); cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); }); cy.toolbarButton('rectangle').click(); cy.get(mapSelector).click(450, 250).click(390, 60); cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); }); }); @@ -407,15 +407,15 @@ describe('Draw Rectangle', () => { cy.get(mapSelector).click(350, 250).click(190, 60); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; - expect(layer.pm._map).to.not.eq(undefined); + const layer = map.geoman.getGeomanDrawLayers()[0]; + expect(layer.geoman._map).to.not.eq(undefined); }); }); it('drags a whole LayerGroup', () => { cy.window().then(({ map, L }) => { const fg = new L.FeatureGroup().addTo(map); - map.pm.setGlobalOptions({ layerGroup: fg, syncLayersOnDrag: true }); + map.geoman.setGlobalOptions({ layerGroup: fg, syncLayersOnDrag: true }); }); cy.toolbarButton('rectangle').click(); @@ -427,22 +427,22 @@ describe('Draw Rectangle', () => { cy.toolbarButton('drag').click(); cy.window().then(({ map }) => { - const layers = map.pm.getGeomanDrawLayers(); + const layers = map.geoman.getGeomanDrawLayers(); const center1 = layers[0].getCenter(); const center2 = layers[1].getCenter(); const layer = layers[0]; - layer.pm._dragMixinOnPointerDown({ + layer.geoman._dragMixinOnPointerDown({ originalEvent: { button: 0 }, target: layer, latlng: map.containerPointToLatLng([290, 290]), }); - layer.pm._dragMixinOnPointerMove({ + layer.geoman._dragMixinOnPointerMove({ originalEvent: { button: 0 }, target: layer, latlng: map.containerPointToLatLng([500, 320]), }); - layer.pm._dragMixinOnPointerUp({ + layer.geoman._dragMixinOnPointerUp({ originalEvent: { button: 0 }, target: layer, latlng: map.containerPointToLatLng([320, 320]), @@ -463,26 +463,26 @@ describe('Draw Rectangle', () => { cy.toolbarButton('drag').click(); cy.window().then(({ map }) => { - const layers = map.pm.getGeomanDrawLayers(); + const layers = map.geoman.getGeomanDrawLayers(); let center1 = layers[0].getCenter(); let center2 = layers[1].getCenter(); const layer = layers[0]; // if this layer is dragged, all layers on the map should dragged too - layer.pm.options.syncLayersOnDrag = layers; + layer.geoman.options.syncLayersOnDrag = layers; // Drag both layers - layer.pm._dragMixinOnPointerDown({ + layer.geoman._dragMixinOnPointerDown({ originalEvent: { button: 0 }, target: layer, latlng: map.containerPointToLatLng([290, 290]), }); - layer.pm._dragMixinOnPointerMove({ + layer.geoman._dragMixinOnPointerMove({ originalEvent: { button: 0 }, target: layer, latlng: map.containerPointToLatLng([500, 320]), }); - layer.pm._dragMixinOnPointerUp({ + layer.geoman._dragMixinOnPointerUp({ originalEvent: { button: 0 }, target: layer, latlng: map.containerPointToLatLng([320, 320]), @@ -496,17 +496,17 @@ describe('Draw Rectangle', () => { const layer2 = layers[1]; // Drag only layer2 - layer2.pm._dragMixinOnPointerDown({ + layer2.geoman._dragMixinOnPointerDown({ originalEvent: { button: 0 }, target: layer2, latlng: map.containerPointToLatLng([290, 290]), }); - layer2.pm._dragMixinOnPointerMove({ + layer2.geoman._dragMixinOnPointerMove({ originalEvent: { button: 0 }, target: layer2, latlng: map.containerPointToLatLng([500, 320]), }); - layer2.pm._dragMixinOnPointerUp({ + layer2.geoman._dragMixinOnPointerUp({ originalEvent: { button: 0 }, target: layer2, latlng: map.containerPointToLatLng([320, 320]), @@ -526,7 +526,7 @@ describe('Draw Rectangle', () => { cy.get(mapSelector).click(200, 200).click(400, 350); cy.window().then(({ map }) => { - map.pm.getGeomanDrawLayers()[0].pm.options.allowEditing = false; + map.geoman.getGeomanDrawLayers()[0].geoman.options.allowEditing = false; }); cy.toolbarButton('rectangle') @@ -554,7 +554,7 @@ describe('Draw Rectangle', () => { cy.get(mapSelector).click(200, 200).click(400, 350); cy.window().then(({ map }) => { - map.pm.getGeomanDrawLayers()[0].pm.options.allowRotation = false; + map.geoman.getGeomanDrawLayers()[0].geoman.options.allowRotation = false; }); cy.toolbarButton('rectangle') @@ -582,9 +582,9 @@ describe('Draw Rectangle', () => { cy.window().then(({ L, map }) => { // move the hintMarker outside of the map bounds (max is 85.0511287798) - map.pm.Draw.Rectangle._hintMarker.setLatLng(new L.LatLng(87, -302)); + map.geoman.Draw.Rectangle._hintMarker.setLatLng(new L.LatLng(87, -302)); - const drawRect = map.pm.Draw.Rectangle; + const drawRect = map.geoman.Draw.Rectangle; const markers = [ drawRect._hintMarker, @@ -629,7 +629,7 @@ describe('Draw Rectangle', () => { .addLayer(tiles); // add leaflet-geoman toolbar - mapCanvas.pm.addControls(); + mapCanvas.geoman.addControls(); }); cy.toolbarButton('rectangle').click(); @@ -641,26 +641,26 @@ describe('Draw Rectangle', () => { cy.toolbarButton('drag').click(); cy.window().then(() => { - const layers = mapCanvas.pm.getGeomanDrawLayers(); + const layers = mapCanvas.geoman.getGeomanDrawLayers(); let center1 = layers[0].getCenter(); let center2 = layers[1].getCenter(); const layer = layers[0]; // if this layer is dragged, all layers on the map should dragged too - layer.pm.options.syncLayersOnDrag = layers; + layer.geoman.options.syncLayersOnDrag = layers; // Drag both layers - layer.pm._dragMixinOnPointerDown({ + layer.geoman._dragMixinOnPointerDown({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([290, 290]), }); - layer.pm._dragMixinOnPointerMove({ + layer.geoman._dragMixinOnPointerMove({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([500, 320]), }); - layer.pm._dragMixinOnPointerUp({ + layer.geoman._dragMixinOnPointerUp({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([320, 320]), @@ -674,17 +674,17 @@ describe('Draw Rectangle', () => { const layer2 = layers[1]; // Drag only layer2 - layer2.pm._dragMixinOnPointerDown({ + layer2.geoman._dragMixinOnPointerDown({ originalEvent: { button: 0 }, target: layer2, latlng: mapCanvas.containerPointToLatLng([290, 290]), }); - layer2.pm._dragMixinOnPointerMove({ + layer2.geoman._dragMixinOnPointerMove({ originalEvent: { button: 0 }, target: layer2, latlng: mapCanvas.containerPointToLatLng([500, 320]), }); - layer2.pm._dragMixinOnPointerUp({ + layer2.geoman._dragMixinOnPointerUp({ originalEvent: { button: 0 }, target: layer2, latlng: mapCanvas.containerPointToLatLng([320, 320]), @@ -716,7 +716,7 @@ describe('Draw Rectangle', () => { .addLayer(tiles); // add leaflet-geoman toolbar - mapCanvas.pm.addControls(); + mapCanvas.geoman.addControls(); }); cy.toolbarButton('rectangle').click(); @@ -725,23 +725,23 @@ describe('Draw Rectangle', () => { cy.toolbarButton('drag').click(); cy.window().then(() => { - const layers = mapCanvas.pm.getGeomanDrawLayers(); + const layers = mapCanvas.geoman.getGeomanDrawLayers(); const center1 = layers[0].getCenter(); const layer = layers[0]; // Drag both layers - layer.pm._dragMixinOnPointerDown({ + layer.geoman._dragMixinOnPointerDown({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([290, 290]), }); - layer.pm._dragMixinOnPointerMove({ + layer.geoman._dragMixinOnPointerMove({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([500, 320]), }); - layer.pm._dragMixinOnPointerUp({ + layer.geoman._dragMixinOnPointerUp({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([320, 320]), @@ -772,7 +772,7 @@ describe('Draw Rectangle', () => { .addLayer(tiles); // add leaflet-geoman toolbar - mapCanvas.pm.addControls(); + mapCanvas.geoman.addControls(); }); cy.toolbarButton('rectangle').click(); @@ -781,23 +781,23 @@ describe('Draw Rectangle', () => { cy.toolbarButton('drag').click(); cy.window().then(() => { - const layers = mapCanvas.pm.getGeomanDrawLayers(); + const layers = mapCanvas.geoman.getGeomanDrawLayers(); const center1 = layers[0].getCenter(); const layer = layers[0]; // Drag both layers - layer.pm._dragMixinOnPointerDown({ + layer.geoman._dragMixinOnPointerDown({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([290, 290]), }); - layer.pm._dragMixinOnPointerMove({ + layer.geoman._dragMixinOnPointerMove({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([500, 320]), }); - layer.pm._dragMixinOnPointerUp({ + layer.geoman._dragMixinOnPointerUp({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([320, 320]), @@ -830,9 +830,9 @@ describe('Draw Rectangle', () => { .addLayer(tiles); // add leaflet-geoman toolbar - mapCanvas.pm.addControls(); + mapCanvas.geoman.addControls(); - mapCanvas.on('pm:create', (e) => { + mapCanvas.on('geoman:create', (e) => { rect1 = e.layer; rect2 = new L.Rectangle(rect1.getBounds(), { renderer: new L.SVG(), @@ -852,17 +852,17 @@ describe('Draw Rectangle', () => { const layer = rect1; // Drag both layers - layer.pm._dragMixinOnPointerDown({ + layer.geoman._dragMixinOnPointerDown({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([290, 290]), }); - layer.pm._dragMixinOnPointerMove({ + layer.geoman._dragMixinOnPointerMove({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([500, 320]), }); - layer.pm._dragMixinOnPointerUp({ + layer.geoman._dragMixinOnPointerUp({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([320, 320]), @@ -879,17 +879,17 @@ describe('Draw Rectangle', () => { const layer = rect2; // Drag both layers - layer.pm._dragMixinOnPointerDown({ + layer.geoman._dragMixinOnPointerDown({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([290, 290]), }); - layer.pm._dragMixinOnPointerMove({ + layer.geoman._dragMixinOnPointerMove({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([500, 320]), }); - layer.pm._dragMixinOnPointerUp({ + layer.geoman._dragMixinOnPointerUp({ originalEvent: { button: 0 }, target: layer, latlng: mapCanvas.containerPointToLatLng([320, 320]), @@ -913,16 +913,16 @@ describe('Draw Rectangle', () => { const style = { color: 'red', }; - map.pm.setGlobalOptions({ pathOptions: style }); + map.geoman.setGlobalOptions({ pathOptions: style }); - const layer = map.pm.Draw.Rectangle._layer; + const layer = map.geoman.Draw.Rectangle._layer; expect(layer.options.color).to.eql('red'); }); }); it('Return correct corners of rotated rectangle while drawing', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ rectangleAngle: 45 }); + map.geoman.setGlobalOptions({ rectangleAngle: 45 }); }); cy.toolbarButton('rectangle') @@ -934,7 +934,7 @@ describe('Draw Rectangle', () => { cy.get(mapSelector).trigger('pointermove', 500, 300); cy.window().then(({ map }) => { - const corners = map.pm.Draw.Rectangle._findCorners(); + const corners = map.geoman.Draw.Rectangle._findCorners(); expect( corners[0].equals([51.50820824957313, -0.13801574707031253]) ).to.eql(true); @@ -966,8 +966,8 @@ describe('Draw Rectangle', () => { cy.toolbarButton('edit').click(); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanLayers()[0]; - const marker1 = layer.pm._markers[0][0]; + const layer = map.geoman.getGeomanLayers()[0]; + const marker1 = layer.geoman._markers[0][0]; marker1.fire('dragstart', { target: marker1 }); marker1.setLatLng(map.containerPointToLatLng([200, 120])); marker1.fire('drag', { target: marker1 }); @@ -1012,8 +1012,8 @@ describe('Draw Rectangle', () => { cy.window().then(({ map }) => { let count = 0; - const layer = map.pm.getGeomanDrawLayers()[0]; - layer.on('pm:vertexclick', () => { + const layer = map.geoman.getGeomanDrawLayers()[0]; + layer.on('geoman:vertexclick', () => { count += 1; if (count >= 2) { expect(count).to.eql(2); @@ -1037,13 +1037,13 @@ describe('Draw Rectangle', () => { cy.get(mapSelector).click(200, 200); cy.window().then(({ map }) => { - expect(map.pm.getGeomanDrawLayers().length).to.eql(0); + expect(map.geoman.getGeomanDrawLayers().length).to.eql(0); }); }); it("doesn't snap to the vertex", () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ snapVertex: false }); + map.geoman.setGlobalOptions({ snapVertex: false }); }); cy.toolbarButton('rectangle') @@ -1061,7 +1061,7 @@ describe('Draw Rectangle', () => { cy.get(mapSelector).click(150, 60).click(250, 90); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[1]; + const layer = map.geoman.getGeomanDrawLayers()[1]; expect(layer.getLatLngs()[0][1].lat).to.eq(51.52529983831507); expect(layer.getLatLngs()[0][1].lng).to.eq(-0.15003204345703128); }); @@ -1074,7 +1074,7 @@ describe('Draw Rectangle', () => { .trigger('pointerup', 150, 55, { eventConstructor: 'PointerEvent' }); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[1]; + const layer = map.geoman.getGeomanDrawLayers()[1]; expect(layer.getLatLngs()[0][1].lat).to.eq(51.525833847122584); expect(layer.getLatLngs()[0][1].lng).to.eq(-0.13286590576171878); }); diff --git a/cypress/e2e/rotation.cy.js b/cypress/e2e/rotation.cy.js index a8943ff7..f65d0490 100644 --- a/cypress/e2e/rotation.cy.js +++ b/cypress/e2e/rotation.cy.js @@ -10,20 +10,20 @@ describe('Rotation', () => { cy.get(mapSelector).click(200, 200).click(400, 350); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; - expect(layer.pm.getAngle()).to.equal(0); + const layer = map.geoman.getGeomanDrawLayers()[0]; + expect(layer.geoman.getAngle()).to.equal(0); - layer.pm.rotateLayer(30); - expect(layer.pm.getAngle()).to.equal(30); + layer.geoman.rotateLayer(30); + expect(layer.geoman.getAngle()).to.equal(30); - layer.pm.rotateLayer(-60); - expect(layer.pm.getAngle()).to.equal(330); + layer.geoman.rotateLayer(-60); + expect(layer.geoman.getAngle()).to.equal(330); - layer.pm.rotateLayerToAngle(20); - expect(layer.pm.getAngle()).to.equal(20); + layer.geoman.rotateLayerToAngle(20); + expect(layer.geoman.getAngle()).to.equal(20); - layer.pm.rotateLayerToAngle(-70); - expect(layer.pm.getAngle()).to.equal(290); + layer.geoman.rotateLayerToAngle(-70); + expect(layer.geoman.getAngle()).to.equal(290); }); }); @@ -36,20 +36,20 @@ describe('Rotation', () => { cy.get(mapSelector).click(200, 200).click(400, 350); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; - expect(layer.pm.rotateEnabled()).to.equal(false); + const layer = map.geoman.getGeomanDrawLayers()[0]; + expect(layer.geoman.rotateEnabled()).to.equal(false); - layer.pm.enableRotate(); - expect(layer.pm.rotateEnabled()).to.equal(true); + layer.geoman.enableRotate(); + expect(layer.geoman.rotateEnabled()).to.equal(true); }); cy.hasVertexMarkers(4); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; + const layer = map.geoman.getGeomanDrawLayers()[0]; - layer.pm.disableRotate(); - expect(layer.pm.rotateEnabled()).to.equal(false); + layer.geoman.disableRotate(); + expect(layer.geoman.rotateEnabled()).to.equal(false); }); cy.hasVertexMarkers(0); }); @@ -63,21 +63,21 @@ describe('Rotation', () => { cy.get(mapSelector).click(200, 200).click(400, 350); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; + const layer = map.geoman.getGeomanDrawLayers()[0]; - map.pm.enableGlobalRotateMode(); - expect(layer.pm.rotateEnabled()).to.equal(true); - expect(map.pm.globalRotateModeEnabled()).to.equal(true); + map.geoman.enableGlobalRotateMode(); + expect(layer.geoman.rotateEnabled()).to.equal(true); + expect(map.geoman.globalRotateModeEnabled()).to.equal(true); }); cy.hasVertexMarkers(4); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; + const layer = map.geoman.getGeomanDrawLayers()[0]; - map.pm.disableGlobalRotateMode(); - expect(layer.pm.rotateEnabled()).to.equal(false); - expect(map.pm.globalRotateModeEnabled()).to.equal(false); + map.geoman.disableGlobalRotateMode(); + expect(layer.geoman.rotateEnabled()).to.equal(false); + expect(map.geoman.globalRotateModeEnabled()).to.equal(false); }); cy.hasVertexMarkers(0); @@ -90,7 +90,7 @@ describe('Rotation', () => { cy.hasVertexMarkers(4); cy.window().then(({ map }) => { - map.pm.toggleGlobalRotateMode(); + map.geoman.toggleGlobalRotateMode(); }); cy.hasVertexMarkers(0); @@ -112,20 +112,22 @@ describe('Rotation', () => { cy.hasVertexMarkers(4); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; - layer.pm.rotateLayer(30); - expect(layer.pm.getAngle()).to.equal(30); + const layer = map.geoman.getGeomanDrawLayers()[0]; + layer.geoman.rotateLayer(30); + expect(layer.geoman.getAngle()).to.equal(30); // Marker is on the correct position expect( - layer.getLatLngs()[0][0].equals(layer.pm._rotatePoly.getLatLngs()[0][0]) + layer + .getLatLngs()[0][0] + .equals(layer.geoman._rotatePoly.getLatLngs()[0][0]) ).to.equal(true); }); }); it('draw rotated rectangle', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ rectangleAngle: 40 }); + map.geoman.setGlobalOptions({ rectangleAngle: 40 }); }); cy.toolbarButton('rectangle') @@ -136,8 +138,8 @@ describe('Rotation', () => { cy.get(mapSelector).click(200, 200).click(600, 350); cy.window().then(({ map, L }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; - expect(layer.pm.getAngle()).to.equal(40); + const layer = map.geoman.getGeomanDrawLayers()[0]; + expect(layer.geoman.getAngle()).to.equal(40); expect( layer .getLatLngs()[0][1] @@ -155,15 +157,15 @@ describe('Rotation', () => { cy.get(mapSelector).click(200, 200).click(400, 350); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; - layer.pm.enableRotate(); - const marker1 = layer.pm._rotatePoly.pm._markers[0][0]; + const layer = map.geoman.getGeomanDrawLayers()[0]; + layer.geoman.enableRotate(); + const marker1 = layer.geoman._rotatePoly.geoman._markers[0][0]; marker1.fire('dragstart', { target: marker1 }); marker1.setLatLng(map.containerPointToLatLng([200, 210])); marker1.fire('drag', { target: marker1 }); marker1.fire('dragend', { target: marker1 }); - expect(Math.ceil(layer.pm.getAngle())).to.eq(70); + expect(Math.ceil(layer.geoman.getAngle())).to.eq(70); }); }); @@ -182,14 +184,14 @@ describe('Rotation', () => { .click(400, 150); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; - layer.pm.enableRotate(); - const marker1 = layer.pm._rotatePoly.pm._markers[0][0][0]; + const layer = map.geoman.getGeomanDrawLayers()[0]; + layer.geoman.enableRotate(); + const marker1 = layer.geoman._rotatePoly.geoman._markers[0][0][0]; marker1.fire('dragstart', { target: marker1 }); marker1.setLatLng(map.containerPointToLatLng([200, 210])); marker1.fire('drag', { target: marker1 }); marker1.fire('dragend', { target: marker1 }); - expect(Math.ceil(layer.pm.getAngle())).to.eq(64); + expect(Math.ceil(layer.geoman.getAngle())).to.eq(64); }); }); @@ -201,9 +203,9 @@ describe('Rotation', () => { cy.get(mapSelector).click(200, 200).click(600, 350); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; - layer.pm.enableRotate(); - const rotatePoly = layer.pm._rotatePoly; + const layer = map.geoman.getGeomanDrawLayers()[0]; + layer.geoman.enableRotate(); + const rotatePoly = layer.geoman._rotatePoly; layer.remove(); expect(!!rotatePoly._map).to.eq(false); }); @@ -217,7 +219,7 @@ describe('Rotation', () => { [3, 4], ]; const rect = new L.Rectangle(coords).addTo(map); - rect.pm.rotateLayer(50); + rect.geoman.rotateLayer(50); }).to.not.throw(); }); }); @@ -232,19 +234,19 @@ describe('Rotation', () => { const rect = new L.Rectangle(coords).addTo(map); // If no rotation center is set, use the shape's center. - const defaultCenter = rect.pm.getRotationCenter(); + const defaultCenter = rect.geoman.getRotationCenter(); expect(defaultCenter.lat).to.closeTo(2, 0.1); expect(defaultCenter.lng).to.closeTo(2, 0.1); // Introduce a new origin of rotation - rect.pm.setRotationCenter(new L.LatLng([4, 4])); - const newCenter = rect.pm.getRotationCenter(); + rect.geoman.setRotationCenter(new L.LatLng([4, 4])); + const newCenter = rect.geoman.getRotationCenter(); expect(newCenter.lat).to.closeTo(4, 0.1); expect(newCenter.lng).to.closeTo(4, 0.1); // Unset rotation center (i.e., use default) - rect.pm.setRotationCenter(null); - const restoredCenter = rect.pm.getRotationCenter(); + rect.geoman.setRotationCenter(null); + const restoredCenter = rect.geoman.getRotationCenter(); expect(restoredCenter).to.eql(defaultCenter); }); }); @@ -258,11 +260,11 @@ describe('Rotation', () => { cy.get(mapSelector).click(200, 200).click(400, 350); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; + const layer = map.geoman.getGeomanDrawLayers()[0]; const origin = map.containerPointToLatLng([200, 200]); - layer.pm.setRotationCenter(origin); + layer.geoman.setRotationCenter(origin); - layer.pm.rotateLayerToAngle(90); + layer.geoman.rotateLayerToAngle(90); const expected = [ { x: 50, y: 200 }, @@ -289,16 +291,16 @@ describe('Rotation', () => { cy.get(mapSelector).click(200, 200).click(400, 350); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; + const layer = map.geoman.getGeomanDrawLayers()[0]; const origin = map.containerPointToLatLng([200, 200]); - layer.pm.setRotationCenter(origin); + layer.geoman.setRotationCenter(origin); }); cy.toolbarButton('rotate').click(); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; - const marker1 = layer.pm._rotatePoly.pm._markers[0][0]; + const layer = map.geoman.getGeomanDrawLayers()[0]; + const marker1 = layer.geoman._rotatePoly.geoman._markers[0][0]; marker1.fire('dragstart', { target: marker1 }); marker1.setLatLng(map.containerPointToLatLng([300, 310])); marker1.fire('drag', { target: marker1 }); @@ -325,7 +327,7 @@ describe('Rotation', () => { }, ]; - const layer = map.pm.getGeomanDrawLayers()[0]; + const layer = map.geoman.getGeomanDrawLayers()[0]; const px = layer.getLatLngs()[0].map((latlng) => { const point = map.latLngToContainerPoint(latlng); return { x: point.x, y: point.y }; @@ -345,14 +347,14 @@ describe('Rotation', () => { cy.toolbarButton('rotate').click(); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; + const layer = map.geoman.getGeomanDrawLayers()[0]; const origin = map.containerPointToLatLng([200, 200]); - layer.pm.setRotationCenter(origin); + layer.geoman.setRotationCenter(origin); }); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanDrawLayers()[0]; - const marker1 = layer.pm._rotatePoly.pm._markers[0][0]; + const layer = map.geoman.getGeomanDrawLayers()[0]; + const marker1 = layer.geoman._rotatePoly.geoman._markers[0][0]; marker1.fire('dragstart', { target: marker1 }); marker1.setLatLng(map.containerPointToLatLng([300, 310])); marker1.fire('drag', { target: marker1 }); @@ -379,7 +381,7 @@ describe('Rotation', () => { }, ]; - const layer = map.pm.getGeomanDrawLayers()[0]; + const layer = map.geoman.getGeomanDrawLayers()[0]; const px = layer.getLatLngs()[0].map((latlng) => { const point = map.latLngToContainerPoint(latlng); return { x: point.x, y: point.y }; @@ -395,9 +397,9 @@ describe('Rotation', () => { [3, 4], ]; const rect = new L.Rectangle(coords).addTo(map); - rect.pm.enableRotate(); + rect.geoman.enableRotate(); - expect(map.pm.getGeomanLayers().length).to.eq(1); + expect(map.geoman.getGeomanLayers().length).to.eq(1); }); }); @@ -408,11 +410,11 @@ describe('Rotation', () => { [3, 4], ]; const rect = new L.Rectangle(coords).addTo(map); - rect.pm.enableRotate(); - rect.pm.enableRotate(); + rect.geoman.enableRotate(); + rect.geoman.enableRotate(); cy.hasVertexMarkers(4); - expect(map.pm.getGeomanLayers().length).to.eq(1); + expect(map.geoman.getGeomanLayers().length).to.eq(1); }); }); @@ -429,11 +431,11 @@ describe('Rotation', () => { ]; new L.Rectangle(coords2).addTo(map); - map.pm.enableGlobalRotateMode(); - map.pm.enableGlobalRotateMode(); + map.geoman.enableGlobalRotateMode(); + map.geoman.enableGlobalRotateMode(); cy.hasVertexMarkers(8); - expect(map.pm.getGeomanLayers().length).to.eq(2); + expect(map.geoman.getGeomanLayers().length).to.eq(2); }); }); @@ -453,17 +455,17 @@ describe('Rotation', () => { cy.toolbarButton('rotate').click(); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanLayers()[0]; - layer.pm.enableRotate(); - const marker1 = layer.pm._rotatePoly.pm._markers[0][0]; + const layer = map.geoman.getGeomanLayers()[0]; + layer.geoman.enableRotate(); + const marker1 = layer.geoman._rotatePoly.geoman._markers[0][0]; marker1.fire('dragstart', { target: marker1 }); marker1.setLatLng(map.containerPointToLatLng([200, 120])); marker1.fire('drag', { target: marker1 }); marker1.fire('dragend', { target: marker1 }); - expect(Math.ceil(layer.pm.getAngle())).to.eq(39); + expect(Math.ceil(layer.geoman.getAngle())).to.eq(39); - layer.pm.rotateLayerToAngle(0); - expect(Math.ceil(layer.pm.getAngle())).to.eq(0); + layer.geoman.rotateLayerToAngle(0); + expect(Math.ceil(layer.geoman.getAngle())).to.eq(0); const expected = [ { diff --git a/cypress/e2e/text.cy.js b/cypress/e2e/text.cy.js index 049eaf6f..f878aa90 100644 --- a/cypress/e2e/text.cy.js +++ b/cypress/e2e/text.cy.js @@ -7,7 +7,7 @@ describe('Text Layer', () => { textMarker: true, text: 'Text Layer', }).addTo(map); - expect(textLayer.pm.getShape()).to.eq('Text'); + expect(textLayer.geoman.getShape()).to.eq('Text'); textLayer.remove(); }); @@ -16,7 +16,7 @@ describe('Text Layer', () => { textMarker: false, text: 'Text Layer', }).addTo(map); - expect(textLayer.pm.getShape()).to.eq('Marker'); + expect(textLayer.geoman.getShape()).to.eq('Marker'); textLayer.remove(); }); @@ -24,8 +24,8 @@ describe('Text Layer', () => { const textLayer = new L.Marker(map.getCenter(), { textMarker: true, }).addTo(map); - expect(textLayer.pm.getShape()).to.eq('Text'); - expect(textLayer.pm.getText()).to.eq(''); + expect(textLayer.geoman.getShape()).to.eq('Text'); + expect(textLayer.geoman.getText()).to.eq(''); textLayer.remove(); }); }); @@ -39,20 +39,20 @@ describe('Text Layer', () => { text: 'Text Layer', }).addTo(map); - expect(map.pm.getGeomanLayers().length).to.eq(0); + expect(map.geoman.getGeomanLayers().length).to.eq(0); - textLayer.options.pmIgnore = false; + textLayer.options.geomanIgnore = false; Geoman.reInitLayer(textLayer); - expect(map.pm.getGeomanLayers().length).to.eq(1); + expect(map.geoman.getGeomanLayers().length).to.eq(1); }); cy.toolbarButton('edit').click(); cy.get(mapSelector).click(570, 250); cy.window().then(({ map }) => { - const layer = map.pm.getGeomanLayers()[0]; - expect(layer.pm.hasFocus()).to.be.eq(true); + const layer = map.geoman.getGeomanLayers()[0]; + expect(layer.geoman.hasFocus()).to.be.eq(true); }); }); @@ -74,9 +74,9 @@ describe('Text Layer', () => { let textArea; cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); - const textLayer = map.pm.getGeomanDrawLayers()[0]; - textArea = textLayer.pm.getElement(); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); + const textLayer = map.geoman.getGeomanDrawLayers()[0]; + textArea = textLayer.geoman.getElement(); cy.get(textArea).type('Hello World'); }); @@ -104,9 +104,9 @@ describe('Text Layer', () => { let textArea; cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); - const textLayer = map.pm.getGeomanDrawLayers()[0]; - textArea = textLayer.pm.getElement(); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); + const textLayer = map.geoman.getGeomanDrawLayers()[0]; + textArea = textLayer.geoman.getElement(); expect(textArea.value).to.eq(''); }); @@ -115,7 +115,7 @@ describe('Text Layer', () => { cy.wait(500); cy.window().then(({ map }) => { - expect(0).to.eq(map.pm.getGeomanDrawLayers().length); + expect(0).to.eq(map.geoman.getGeomanDrawLayers().length); }); }); @@ -129,9 +129,9 @@ describe('Text Layer', () => { let textArea; cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); - const textLayer = map.pm.getGeomanDrawLayers()[0]; - textArea = textLayer.pm.getElement(); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); + const textLayer = map.geoman.getGeomanDrawLayers()[0]; + textArea = textLayer.geoman.getElement(); expect(textArea.value).to.eq(''); }); @@ -140,13 +140,13 @@ describe('Text Layer', () => { cy.wait(500); cy.window().then(({ map }) => { - expect(0).to.eq(map.pm.getGeomanDrawLayers().length); + expect(0).to.eq(map.geoman.getGeomanDrawLayers().length); }); }); it('continue drawing', () => { cy.window().then(({ map }) => { - map.pm.setGlobalOptions({ continueDrawing: true }); + map.geoman.setGlobalOptions({ continueDrawing: true }); }); cy.toolbarButton('text') @@ -158,9 +158,9 @@ describe('Text Layer', () => { let textArea; cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); - const textLayer = map.pm.getGeomanDrawLayers()[0]; - textArea = textLayer.pm.getElement(); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); + const textLayer = map.geoman.getGeomanDrawLayers()[0]; + textArea = textLayer.geoman.getElement(); cy.get(textArea).type('Hello World'); }); @@ -175,21 +175,21 @@ describe('Text Layer', () => { expect(textArea.classList.contains('leaflet-geoman-disabled')).to.eq( true ); - expect(2).to.eq(map.pm.getGeomanDrawLayers().length); - const textLayer = map.pm.getGeomanDrawLayers()[1]; - textArea = textLayer.pm.getElement(); + expect(2).to.eq(map.geoman.getGeomanDrawLayers().length); + const textLayer = map.geoman.getGeomanDrawLayers()[1]; + textArea = textLayer.geoman.getElement(); cy.get(textArea).type('Geoman!'); - const textMap = map.pm.Draw.Text._hintMarker._map; + const textMap = map.geoman.Draw.Text._hintMarker._map; expect(textMap).to.eq(null); }); cy.get(mapSelector).trigger('pointermove', 200, 150, { which: 1 }); cy.window().then(({ map }) => { - const textMap = map.pm.Draw.Text._hintMarker._map; + const textMap = map.geoman.Draw.Text._hintMarker._map; expect(textMap).to.eq(map); - const latlng = map.pm.Draw.Text._hintMarker.getLatLng(); + const latlng = map.geoman.Draw.Text._hintMarker.getLatLng(); const pxLatLng = map.containerPointToLatLng([200, 150]); expect(pxLatLng).to.deep.equal(latlng); }); @@ -207,7 +207,7 @@ describe('Text Layer', () => { it("uses enableDraw('Text')", () => { cy.window().then(({ map }) => { - map.pm.enableDraw('Text'); + map.geoman.enableDraw('Text'); }); cy.toolbarButton('text') @@ -218,9 +218,9 @@ describe('Text Layer', () => { let textArea; cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); - const textLayer = map.pm.getGeomanDrawLayers()[0]; - textArea = textLayer.pm.getElement(); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); + const textLayer = map.geoman.getGeomanDrawLayers()[0]; + textArea = textLayer.geoman.getElement(); cy.get(textArea).type('Hello World'); }); @@ -248,9 +248,9 @@ describe('Text Layer', () => { let textArea; cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); - const textLayer = map.pm.getGeomanDrawLayers()[0]; - textArea = textLayer.pm.getElement(); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); + const textLayer = map.geoman.getGeomanDrawLayers()[0]; + textArea = textLayer.geoman.getElement(); expect(textArea.style.width).to.eq('16px'); cy.get(textArea).type('Hello World'); }); @@ -273,9 +273,9 @@ describe('Text Layer', () => { let textArea; cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); - const textLayer = map.pm.getGeomanDrawLayers()[0]; - textArea = textLayer.pm.getElement(); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); + const textLayer = map.geoman.getGeomanDrawLayers()[0]; + textArea = textLayer.geoman.getElement(); expect(textArea.style.width).to.eq('16px'); cy.get(textArea).type('Hello World'); }); @@ -304,7 +304,7 @@ describe('Text Layer', () => { describe('Options', () => { it('adds predefined `text`', () => { cy.window().then(({ map }) => { - map.pm.enableDraw('Text', { + map.geoman.enableDraw('Text', { textOptions: { text: 'This is nice. ' }, }); }); @@ -317,9 +317,9 @@ describe('Text Layer', () => { let textArea; cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); - const textLayer = map.pm.getGeomanDrawLayers()[0]; - textArea = textLayer.pm.getElement(); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); + const textLayer = map.geoman.getGeomanDrawLayers()[0]; + textArea = textLayer.geoman.getElement(); cy.get(textArea).type('Hello World'); }); @@ -332,7 +332,7 @@ describe('Text Layer', () => { it('`focusAfterDraw: false`', () => { cy.window().then(({ map }) => { - map.pm.enableDraw('Text', { + map.geoman.enableDraw('Text', { textOptions: { focusAfterDraw: false }, }); }); @@ -345,9 +345,9 @@ describe('Text Layer', () => { let textArea; cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); - const textLayer = map.pm.getGeomanDrawLayers()[0]; - textArea = textLayer.pm.getElement(); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); + const textLayer = map.geoman.getGeomanDrawLayers()[0]; + textArea = textLayer.geoman.getElement(); expect(textArea.readOnly).to.eq(true); expect(textArea.classList.contains('leaflet-geoman-disabled')).to.eq( true @@ -358,7 +358,7 @@ describe('Text Layer', () => { }); it('`removeIfEmpty: false`', () => { cy.window().then(({ map }) => { - map.pm.enableDraw('Text', { + map.geoman.enableDraw('Text', { textOptions: { focusAfterDraw: false }, }); }); @@ -371,21 +371,21 @@ describe('Text Layer', () => { let textArea; cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); - const textLayer = map.pm.getGeomanDrawLayers()[0]; - textArea = textLayer.pm.getElement(); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); + const textLayer = map.geoman.getGeomanDrawLayers()[0]; + textArea = textLayer.geoman.getElement(); expect(textArea.value).to.eq(''); }); cy.get(mapSelector).click(190, 250); cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); }); }); it('adds css class with `className`', () => { cy.window().then(({ map }) => { - map.pm.enableDraw('Text', { + map.geoman.enableDraw('Text', { textOptions: { className: 'test1 test2' }, }); }); @@ -398,9 +398,9 @@ describe('Text Layer', () => { let textArea; cy.window().then(({ map }) => { - expect(1).to.eq(map.pm.getGeomanDrawLayers().length); - const textLayer = map.pm.getGeomanDrawLayers()[0]; - textArea = textLayer.pm.getElement(); + expect(1).to.eq(map.geoman.getGeomanDrawLayers().length); + const textLayer = map.geoman.getGeomanDrawLayers()[0]; + textArea = textLayer.geoman.getElement(); expect(textArea.classList.contains('test1')).to.eq(true); expect(textArea.classList.contains('test2')).to.eq(true); }); @@ -417,9 +417,9 @@ describe('Text Layer', () => { textMarker: true, text: 'Text Layer', }).addTo(map); - textArea = textLayer.pm.getElement(); - textLayer.pm.enable(); - textLayer.pm.focus(); + textArea = textLayer.geoman.getElement(); + textLayer.geoman.enable(); + textLayer.geoman.focus(); }); cy.window().then(() => { @@ -437,7 +437,7 @@ describe('Text Layer', () => { cy.get(mapSelector).click(90, 280); cy.window().then(() => { - textLayer.pm.disable(); + textLayer.geoman.disable(); expect(textArea.readOnly).to.eq(true); expect(textArea.classList.contains('leaflet-geoman-disabled')).to.eq( true @@ -452,9 +452,9 @@ describe('Text Layer', () => { textMarker: true, text: 'Text Layer', }).addTo(map); - textArea = textLayer.pm.getElement(); - textLayer.pm.enable(); - textLayer.pm.focus(); + textArea = textLayer.geoman.getElement(); + textLayer.geoman.enable(); + textLayer.geoman.focus(); }); cy.window().then(() => { @@ -462,10 +462,10 @@ describe('Text Layer', () => { expect(textArea.classList.contains('leaflet-geoman-disabled')).to.eq( false ); - textLayer.pm.blur(); - expect(textLayer.pm.hasFocus()).to.eq(false); + textLayer.geoman.blur(); + expect(textLayer.geoman.hasFocus()).to.eq(false); - textLayer.pm.disable(); + textLayer.geoman.disable(); expect(textArea.readOnly).to.eq(true); expect(textArea.classList.contains('leaflet-geoman-disabled')).to.eq( true @@ -480,9 +480,9 @@ describe('Text Layer', () => { textMarker: true, text: 'Text Layer', }).addTo(map); - textArea = textLayer.pm.getElement(); - textLayer.pm.enable(); - textLayer.pm.focus(); + textArea = textLayer.geoman.getElement(); + textLayer.geoman.enable(); + textLayer.geoman.focus(); }); cy.window().then(() => { @@ -490,11 +490,11 @@ describe('Text Layer', () => { expect(textArea.classList.contains('leaflet-geoman-disabled')).to.eq( false ); - expect(textLayer.pm.hasFocus()).to.eq(true); - textLayer.pm.blur(); - expect(textLayer.pm.hasFocus()).to.eq(false); + expect(textLayer.geoman.hasFocus()).to.eq(true); + textLayer.geoman.blur(); + expect(textLayer.geoman.hasFocus()).to.eq(false); - textLayer.pm.disable(); + textLayer.geoman.disable(); expect(textArea.readOnly).to.eq(true); expect(textArea.classList.contains('leaflet-geoman-disabled')).to.eq( true @@ -507,7 +507,7 @@ describe('Text Layer', () => { textMarker: true, text: 'Text Layer', }).addTo(map); - const textArea = textLayer.pm.getElement(); + const textArea = textLayer.geoman.getElement(); expect(textArea.tagName).to.eq('TEXTAREA'); }); }); @@ -517,9 +517,9 @@ describe('Text Layer', () => { textMarker: true, text: 'Text Layer', }).addTo(map); - const textArea = textLayer.pm.getElement(); + const textArea = textLayer.geoman.getElement(); expect(textArea.value).to.eq('Text Layer'); - textLayer.pm.setText('Other text'); + textLayer.geoman.setText('Other text'); expect(textArea.value).to.eq('Other text'); }); }); @@ -529,7 +529,7 @@ describe('Text Layer', () => { textMarker: true, text: 'Text Layer', }).addTo(map); - expect(textLayer.pm.getText()).to.eq('Text Layer'); + expect(textLayer.geoman.getText()).to.eq('Text Layer'); }); }); it('unselect text on disable', () => { @@ -538,16 +538,16 @@ describe('Text Layer', () => { textMarker: true, text: 'Text Layer', }).addTo(map); - expect(textLayer.pm.getText()).to.eq('Text Layer'); + expect(textLayer.geoman.getText()).to.eq('Text Layer'); - const textarea = textLayer.pm.getElement(); - textLayer.pm.enable(); + const textarea = textLayer.geoman.getElement(); + textLayer.geoman.enable(); textarea.focus(); textarea.setSelectionRange(2, 5); expect(textarea.selectionStart).to.eq(2); expect(textarea.selectionEnd).to.eq(5); - textLayer.pm.disable(); + textLayer.geoman.disable(); expect(textarea.selectionStart).to.eq(0); expect(textarea.selectionEnd).to.eq(0); }); @@ -562,20 +562,20 @@ describe('Text Layer', () => { expect(map.dragging.enabled()).to.eq(true); - const textarea = textLayer.pm.getElement(); - textLayer.pm.enable(); + const textarea = textLayer.geoman.getElement(); + textLayer.geoman.enable(); textarea.focus(); expect(map.dragging.enabled()).to.eq(false); - textLayer.pm.disable(); + textLayer.geoman.disable(); expect(map.dragging.enabled()).to.eq(true); }); }); }); describe('Events', () => { - it("fire event 'pm:textchange'", () => { + it("fire event 'geoman:textchange'", () => { let textLayer; let event = ''; cy.window().then(({ map, L }) => { @@ -583,23 +583,23 @@ describe('Text Layer', () => { textMarker: true, text: '', }).addTo(map); - textLayer.pm.enable(); - textLayer.pm.focus(); + textLayer.geoman.enable(); + textLayer.geoman.focus(); - textLayer.on('pm:textchange', (e) => { + textLayer.on('geoman:textchange', (e) => { event = e.type; }); - cy.get(textLayer.pm.getElement()).type('Hello World'); + cy.get(textLayer.geoman.getElement()).type('Hello World'); }); cy.window().then(() => { - expect(textLayer.pm.getText()).to.eq('Hello World'); - expect(event).to.eq('pm:textchange'); + expect(textLayer.geoman.getText()).to.eq('Hello World'); + expect(event).to.eq('geoman:textchange'); }); }); - it("fire event 'pm:edit'", () => { + it("fire event 'geoman:edit'", () => { let textLayer; let event = ''; cy.window().then(({ map, L }) => { @@ -607,24 +607,24 @@ describe('Text Layer', () => { textMarker: true, text: '', }).addTo(map); - textLayer.pm.enable(); - textLayer.pm.focus(); + textLayer.geoman.enable(); + textLayer.geoman.focus(); - textLayer.on('pm:edit', (e) => { + textLayer.on('geoman:edit', (e) => { event = e.type; }); - cy.get(textLayer.pm.getElement()).type('Hello World'); + cy.get(textLayer.geoman.getElement()).type('Hello World'); }); cy.window().then(() => { - textLayer.pm.blur(); - expect(textLayer.pm.getText()).to.eq('Hello World'); - expect(event).to.eq('pm:edit'); + textLayer.geoman.blur(); + expect(textLayer.geoman.getText()).to.eq('Hello World'); + expect(event).to.eq('geoman:edit'); }); }); - it("fire event 'pm:update'", () => { + it("fire event 'geoman:update'", () => { let textLayer; let event = ''; cy.window().then(({ map, L }) => { @@ -632,24 +632,24 @@ describe('Text Layer', () => { textMarker: true, text: '', }).addTo(map); - textLayer.pm.enable(); - textLayer.pm.focus(); + textLayer.geoman.enable(); + textLayer.geoman.focus(); - textLayer.on('pm:update', (e) => { + textLayer.on('geoman:update', (e) => { event = e.type; }); - cy.get(textLayer.pm.getElement()).type('Hello World'); + cy.get(textLayer.geoman.getElement()).type('Hello World'); }); cy.window().then(() => { - textLayer.pm.disable(); - expect(textLayer.pm.getText()).to.eq('Hello World'); - expect(event).to.eq('pm:update'); + textLayer.geoman.disable(); + expect(textLayer.geoman.getText()).to.eq('Hello World'); + expect(event).to.eq('geoman:update'); }); }); - it("fire event 'pm:textfocus'", () => { + it("fire event 'geoman:textfocus'", () => { let textLayer; let event = ''; cy.window().then(({ map, L }) => { @@ -657,20 +657,20 @@ describe('Text Layer', () => { textMarker: true, text: '', }).addTo(map); - textLayer.pm.enable(); + textLayer.geoman.enable(); - textLayer.on('pm:textfocus', (e) => { + textLayer.on('geoman:textfocus', (e) => { event = e.type; }); - textLayer.pm.focus(); + textLayer.geoman.focus(); }); cy.window().then(() => { - expect(event).to.eq('pm:textfocus'); + expect(event).to.eq('geoman:textfocus'); }); }); - it("fire event 'pm:textblur'", () => { + it("fire event 'geoman:textblur'", () => { let textLayer; let event = ''; cy.window().then(({ map, L }) => { @@ -678,21 +678,21 @@ describe('Text Layer', () => { textMarker: true, text: '', }).addTo(map); - textLayer.pm.enable(); + textLayer.geoman.enable(); - textLayer.on('pm:textblur', (e) => { + textLayer.on('geoman:textblur', (e) => { event = e.type; }); - textLayer.pm.focus(); - textLayer.pm.blur(); + textLayer.geoman.focus(); + textLayer.geoman.blur(); }); cy.window().then(() => { - expect(event).to.eq('pm:textblur'); + expect(event).to.eq('geoman:textblur'); }); }); - it("fire event 'pm:textblur' only once", () => { + it("fire event 'geoman:textblur' only once", () => { let textLayer; let event = ''; let count = 0; @@ -701,20 +701,20 @@ describe('Text Layer', () => { textMarker: true, text: '', }).addTo(map); - textLayer.pm.enable(); + textLayer.geoman.enable(); count = 0; - textLayer.on('pm:textblur', (e) => { + textLayer.on('geoman:textblur', (e) => { count += 1; event = e.type; }); - textLayer.pm.focus(); - textLayer.pm.blur(); - textLayer.pm.blur(); + textLayer.geoman.focus(); + textLayer.geoman.blur(); + textLayer.geoman.blur(); }); cy.window().then(() => { - expect(event).to.eq('pm:textblur'); + expect(event).to.eq('geoman:textblur'); expect(count).to.eq(1); }); }); diff --git a/cypress/e2e/toolbar.cy.js b/cypress/e2e/toolbar.cy.js index a41edead..733a1ebe 100644 --- a/cypress/e2e/toolbar.cy.js +++ b/cypress/e2e/toolbar.cy.js @@ -7,7 +7,7 @@ describe('Testing the Toolbar', () => { .should('exist'); cy.window().then(({ map }) => { - map.pm.addControls({ + map.geoman.addControls({ position: 'topright', }); }); @@ -27,7 +27,7 @@ describe('Testing the Toolbar', () => { ).click(); cy.window().then(({ map }) => { - map.pm.addControls({ + map.geoman.addControls({ position: 'bottomright', }); }); @@ -37,7 +37,7 @@ describe('Testing the Toolbar', () => { .should('exist'); cy.window().then(({ map }) => { - map.pm.addControls({ + map.geoman.addControls({ position: 'bottomleft', }); }); @@ -47,7 +47,7 @@ describe('Testing the Toolbar', () => { .should('exist'); cy.window().then(({ map }) => { - map.pm.addControls({ + map.geoman.addControls({ position: 'topleft', }); }); @@ -98,7 +98,7 @@ describe('Testing the Toolbar', () => { it('Reacts to programmatic state change', () => { cy.window().then(({ map }) => { - map.pm.enableGlobalEditMode(); + map.geoman.enableGlobalEditMode(); }); cy.toolbarButton('edit') @@ -106,7 +106,7 @@ describe('Testing the Toolbar', () => { .should('have.class', 'leaflet-geoman-active'); cy.window().then(({ map }) => { - map.pm.toggleGlobalRemovalMode(); + map.geoman.toggleGlobalRemovalMode(); }); cy.toolbarButton('edit') @@ -117,9 +117,9 @@ describe('Testing the Toolbar', () => { .should('have.class', 'leaflet-geoman-active'); cy.window().then(({ map }) => { - map.pm.toggleGlobalRemovalMode(); - map.pm.toggleGlobalRemovalMode(); - map.pm.toggleGlobalRemovalMode(); + map.geoman.toggleGlobalRemovalMode(); + map.geoman.toggleGlobalRemovalMode(); + map.geoman.toggleGlobalRemovalMode(); }); cy.toolbarButton('delete') @@ -127,10 +127,10 @@ describe('Testing the Toolbar', () => { .should('have.not.class', 'leaflet-geoman-active'); cy.window().then(({ map }) => { - map.pm.toggleGlobalEditMode(); - map.pm.toggleGlobalRemovalMode(); + map.geoman.toggleGlobalEditMode(); + map.geoman.toggleGlobalRemovalMode(); - map.pm.enableDraw('Marker'); + map.geoman.enableDraw('Marker'); }); cy.toolbarButton('delete') @@ -150,7 +150,7 @@ describe('Testing the Toolbar', () => { it('Has Working translation for circle marker toolbar button', () => { cy.window().then(({ map }) => { - map.pm.setLang('es'); + map.geoman.setLang('es'); }); cy.get( @@ -214,7 +214,7 @@ describe('Testing the Toolbar', () => { let testresult = ''; // Click button -> toggle disabled - map.pm.Toolbar.createCustomControl({ + map.geoman.Toolbar.createCustomControl({ name: 'clickButton', block: 'custom', className: 'leaflet-geoman-icon-marker', @@ -232,10 +232,12 @@ describe('Testing the Toolbar', () => { expect(testresult).to.equal('clickButton clicked'); cy.get(container).should('not.have.class', 'leaflet-geoman-active'); }); - expect(map.pm.Toolbar.getButton('clickButton')).to.not.equal(undefined); - expect(map.pm.Toolbar.controlExists('clickButton')).to.equal(true); + expect(map.geoman.Toolbar.getButton('clickButton')).to.not.equal( + undefined + ); + expect(map.geoman.Toolbar.controlExists('clickButton')).to.equal(true); expect( - 'clickButton' in map.pm.Toolbar.getButtonsInBlock('custom') + 'clickButton' in map.geoman.Toolbar.getButtonsInBlock('custom') ).to.equal(true); }); }); @@ -260,14 +262,14 @@ describe('Testing the Toolbar', () => { }, }, ]; - map.pm.Toolbar.copyDrawControl('Polygon', { + map.geoman.Toolbar.copyDrawControl('Polygon', { name: 'PolygonCopy', block: 'custom', className: 'leaflet-geoman-icon-polygon', title: 'Display text on hover button', actions, }); - map.pm.Draw.PolygonCopy.setPathOptions({ color: 'red' }); + map.geoman.Draw.PolygonCopy.setPathOptions({ color: 'red' }); cy.toolbarButtonContainer('PolygonCopy', map).then((container) => { cy.get(container[0]) @@ -291,8 +293,8 @@ describe('Testing the Toolbar', () => { cy.get(buttonActions[0]).click(); cy.get(container).should('not.have.class', 'leaflet-geoman-active'); cy.window().then(() => { - map.pm.enableDraw('PolygonCopy'); - map.on('pm:create', (e) => { + map.geoman.enableDraw('PolygonCopy'); + map.on('geoman:create', (e) => { expect(e.shape).to.equal('PolygonCopy'); e.layer.on('click', (l) => { testlayer = l.target; @@ -320,12 +322,12 @@ describe('Testing the Toolbar', () => { it('Add new draw instance and keep Toolbar hidden', () => { cy.window().then(({ map }) => { - map.pm.removeControls(); + map.geoman.removeControls(); }); cy.get('.leaflet-geoman-toolbar').should('not.exist'); cy.window().then(({ map }) => { - map.pm.Toolbar.copyDrawControl('Polygon', { name: 'PolygonCopy' }); + map.geoman.Toolbar.copyDrawControl('Polygon', { name: 'PolygonCopy' }); }); cy.get('.leaflet-geoman-toolbar').should('not.exist'); @@ -333,7 +335,7 @@ describe('Testing the Toolbar', () => { it('Custom Controls - Custom order', () => { cy.window().then(({ map }) => { - map.pm.Toolbar.changeControlOrder(['Rectangle']); + map.geoman.Toolbar.changeControlOrder(['Rectangle']); cy.get('.leaflet-geoman-toolbar.leaflet-geoman-draw').then( (container) => { cy.get(container[0].children[0]).then((e) => { @@ -349,7 +351,7 @@ describe('Testing the Toolbar', () => { it('Custom Controls - One Block', () => { cy.window().then(({ map, ONE_BLOCK_CONTROL_COUNT }) => { - map.pm.addControls({ + map.geoman.addControls({ oneBlock: true, }); cy.get('.leaflet-geoman-toolbar.leaflet-geoman-topleft').then( @@ -364,7 +366,7 @@ describe('Testing the Toolbar', () => { it('Different block positions', () => { cy.window().then(({ map }) => { - map.pm.addControls({ + map.geoman.addControls({ positions: { draw: 'topright', edit: 'topleft', @@ -386,7 +388,7 @@ describe('Testing the Toolbar', () => { TOP_RIGHT_BLOCK_CONTROL_COUNT, TOP_LEFT_BLOCK_CONTROL_COUNT, }) => { - map.pm.addControls({ + map.geoman.addControls({ oneBlock: true, positions: { draw: 'topright', @@ -395,7 +397,7 @@ describe('Testing the Toolbar', () => { }, }); - map.pm.Toolbar.copyDrawControl('Polygon', { + map.geoman.Toolbar.copyDrawControl('Polygon', { name: 'PolygonCopy', block: 'custom', className: 'leaflet-geoman-icon-polygon', @@ -418,13 +420,13 @@ describe('Testing the Toolbar', () => { } ); }); - it('Listen on pm:buttonclick and pm:actionclick', () => { + it('Listen on geoman:buttonclick and geoman:actionclick', () => { let eventFired = ''; cy.window().then(({ map }) => { - map.on('pm:buttonclick', ({ btnName }) => { + map.on('geoman:buttonclick', ({ btnName }) => { eventFired = btnName; }); - map.on('pm:actionclick', ({ text }) => { + map.on('geoman:actionclick', ({ text }) => { eventFired = text; }); }); @@ -446,10 +448,10 @@ describe('Testing the Toolbar', () => { it('Disable button', () => { let eventFired = ''; cy.window().then(({ map }) => { - map.on('pm:buttonclick', ({ btnName }) => { + map.on('geoman:buttonclick', ({ btnName }) => { eventFired = btnName; }); - map.pm.Toolbar.setButtonDisabled('drawPolygon', true); + map.geoman.Toolbar.setButtonDisabled('drawPolygon', true); }); cy.toolbarButton('polygon').click(); @@ -464,7 +466,7 @@ describe('Testing the Toolbar', () => { it('Disable active button', () => { let eventFired = ''; cy.window().then(({ map }) => { - map.on('pm:buttonclick', ({ btnName }) => { + map.on('geoman:buttonclick', ({ btnName }) => { eventFired = btnName; }); @@ -475,7 +477,7 @@ describe('Testing the Toolbar', () => { .then(() => { expect(eventFired).to.equal('drawPolygon'); eventFired = ''; - map.pm.Toolbar.setButtonDisabled('drawPolygon', true); + map.geoman.Toolbar.setButtonDisabled('drawPolygon', true); }); }); @@ -497,10 +499,10 @@ describe('Testing the Toolbar', () => { doubleClickZoom: false, // Leaflet 1.8 DoubleTap fix }).setView([51.505, -0.09], 13); - map.pm.Toolbar.setButtonDisabled('drawMarker', true); + map.geoman.Toolbar.setButtonDisabled('drawMarker', true); // add leaflet-geoman toolbar - map.pm.addControls(); + map.geoman.addControls(); cy.get('.leaflet-geoman-toolbar') .parent('.leaflet-top.leaflet-left') @@ -511,10 +513,10 @@ describe('Testing the Toolbar', () => { it('Enable disabled button', () => { let eventFired = ''; cy.window().then(({ map }) => { - map.on('pm:buttonclick', ({ btnName }) => { + map.on('geoman:buttonclick', ({ btnName }) => { eventFired = btnName; }); - map.pm.Toolbar.setButtonDisabled('drawPolygon', true); + map.geoman.Toolbar.setButtonDisabled('drawPolygon', true); }); cy.toolbarButton('polygon') .click() @@ -523,7 +525,7 @@ describe('Testing the Toolbar', () => { }); cy.window().then(({ map }) => { - map.pm.Toolbar.setButtonDisabled('drawPolygon', false); + map.geoman.Toolbar.setButtonDisabled('drawPolygon', false); }); cy.toolbarButton('polygon') .click() @@ -538,11 +540,11 @@ describe('Testing the Toolbar', () => { cy.toolbarButton('edit').click(); cy.window().then(({ map }) => { - map.on('pm:drawend', ({ shape }) => { + map.on('geoman:drawend', ({ shape }) => { eventFired = shape; }); - map.pm.Toolbar.setButtonDisabled('drawText', true); - map.pm.Toolbar.setButtonDisabled('drawText', false); + map.geoman.Toolbar.setButtonDisabled('drawText', true); + map.geoman.Toolbar.setButtonDisabled('drawText', false); }); cy.toolbarButton('text').click(); @@ -557,7 +559,7 @@ describe('Testing the Toolbar', () => { const clickSpyNew = cy.spy(); cy.window().then(({ map }) => { - map.pm.Toolbar.createCustomControl({ + map.geoman.Toolbar.createCustomControl({ name: 'alertBox', onClick: clickSpy, toggle: false, @@ -573,9 +575,9 @@ describe('Testing the Toolbar', () => { // expect needs to be in the this block, otherwise it will be executed before the click event expect(clickSpy.callCount).to.be.eq(1); - map.pm.Toolbar.deleteControl('alertBox'); + map.geoman.Toolbar.deleteControl('alertBox'); - map.pm.Toolbar.createCustomControl({ + map.geoman.Toolbar.createCustomControl({ name: 'alertBox', onClick: clickSpyNew, toggle: false, diff --git a/cypress/e2e/tooltips.cy.js b/cypress/e2e/tooltips.cy.js index 022dbdbe..14029de4 100644 --- a/cypress/e2e/tooltips.cy.js +++ b/cypress/e2e/tooltips.cy.js @@ -5,7 +5,7 @@ describe('Shows Tooltips', () => { it('Has Working Translations', () => { cy.window().then(({ map }) => { - map.pm.setLang('de'); + map.geoman.setLang('de'); }); cy.toolbarButton('polygon').click(); @@ -21,7 +21,7 @@ describe('Shows Tooltips', () => { }, }; - map.pm.setLang('customName', customTranslation, 'en'); + map.geoman.setLang('customName', customTranslation, 'en'); }); cy.toolbarButton('marker').click(); @@ -157,7 +157,7 @@ describe('Shows Tooltips', () => { it('Properly disables tooltips', () => { cy.window().then(({ map }) => { - map.pm.enableDraw('Polygon', { + map.geoman.enableDraw('Polygon', { tooltips: false, }); }); @@ -172,13 +172,13 @@ describe('Shows Tooltips', () => { cy.get('.leaflet-geoman-active .action-cancel').click(); cy.window().then(({ map }) => { - map.pm.enableDraw('Polygon'); + map.geoman.enableDraw('Polygon'); }); cy.get('.leaflet-tooltip-bottom').should('not.exist'); cy.get('.leaflet-geoman-active .action-cancel').click(); cy.window().then(({ map }) => { - map.pm.enableDraw('Polygon', { + map.geoman.enableDraw('Polygon', { tooltips: true, }); }); @@ -193,7 +193,7 @@ describe('Shows Tooltips', () => { it('Has Working translation for circle marker tooltip', () => { cy.window().then(({ map }) => { - map.pm.setLang('es'); + map.geoman.setLang('es'); }); cy.get('.leaflet-tooltip-bottom').should('not.exist'); @@ -228,7 +228,7 @@ describe('Shows Tooltips', () => { }); cy.window().then(({ map }) => { - map.pm.Draw.Polygon._removeLastVertex(); + map.geoman.Draw.Polygon._removeLastVertex(); }); cy.get('.leaflet-tooltip-bottom').then((el) => { @@ -246,7 +246,7 @@ describe('Shows Tooltips', () => { cy.window().then(({ map, Geoman }) => { // we set the language to 'custom' // to make sure that it has no fallback we overwrite the fallback with 'xx' - map.pm.setLang( + map.geoman.setLang( 'custom', { tooltips: { diff --git a/cypress/support/commands.js b/cypress/support/commands.js index 3ddaccf4..f5ce1406 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -117,7 +117,7 @@ Cypress.Commands.add('toolbarButton', (name) => ); Cypress.Commands.add('toolbarButtonContainer', (name, map) => { - cy.get(map.pm.Toolbar.buttons[name]._container.children[0]); + cy.get(map.geoman.Toolbar.buttons[name]._container.children[0]); }); Cypress.Commands.add('drawShape', (shape, ignore) => { @@ -126,7 +126,9 @@ Cypress.Commands.add('drawShape', (shape, ignore) => { cy.fixture(shape) .as('poly') .then((json) => { - const layer = new L.GeoJSON(json, { pmIgnore: ignore }).addTo(map); + const layer = new L.GeoJSON(json, { geomanIgnore: ignore }).addTo( + map + ); const bounds = layer.getBounds(); map.fitBounds(bounds); }); @@ -135,7 +137,9 @@ Cypress.Commands.add('drawShape', (shape, ignore) => { cy.fixture(shape) .as('poly') .then((json) => { - const layer = new L.GeoJSON(json, { pmIgnore: ignore }).addTo(map); + const layer = new L.GeoJSON(json, { geomanIgnore: ignore }).addTo( + map + ); const bounds = layer.getBounds(); map.fitBounds(bounds); }); @@ -144,7 +148,9 @@ Cypress.Commands.add('drawShape', (shape, ignore) => { cy.fixture(shape) .as('poly') .then((json) => { - const layer = new L.GeoJSON(json, { pmIgnore: ignore }).addTo(map); + const layer = new L.GeoJSON(json, { geomanIgnore: ignore }).addTo( + map + ); const bounds = layer.getBounds(); map.fitBounds(bounds); return layer; @@ -155,7 +161,9 @@ Cypress.Commands.add('drawShape', (shape, ignore) => { cy.fixture(shape) .as('poly') .then((json) => { - const layer = new L.GeoJSON(json, { pmIgnore: ignore }).addTo(map); + const layer = new L.GeoJSON(json, { geomanIgnore: ignore }).addTo( + map + ); const bounds = layer.getBounds(); map.fitBounds(bounds); }); @@ -165,7 +173,9 @@ Cypress.Commands.add('drawShape', (shape, ignore) => { cy.fixture(shape) .as('poly') .then((json) => { - const layer = new L.GeoJSON(json, { pmIgnore: ignore }).addTo(map); + const layer = new L.GeoJSON(json, { geomanIgnore: ignore }).addTo( + map + ); const bounds = layer.getBounds(); map.fitBounds(bounds); }); @@ -176,7 +186,7 @@ Cypress.Commands.add('drawShape', (shape, ignore) => { .as('poly') .then((json) => { const layer = new L.Polygon(json.data.points, { - pmIgnore: ignore, + geomanIgnore: ignore, }).addTo(map); const bounds = layer.getBounds(); map.fitBounds(bounds); @@ -211,16 +221,16 @@ Cypress.Commands.add('drawShape', (shape, ignore) => { cy.fixture(shape, ignore) .then((json) => { const layer = new L.GeoJSON(json, { - pmIgnore: ignore, + geomanIgnore: ignore, pointToLayer: (feature, latlng) => { if (feature.properties.customGeometry) { return new L.Circle( latlng, feature.properties.customGeometry.radius, - { pmIgnore: ignore } + { geomanIgnore: ignore } ); } - return new L.Marker(latlng, { pmIgnore: ignore }); + return new L.Marker(latlng, { geomanIgnore: ignore }); }, }); diff --git a/cypress/support/e2e.js b/cypress/support/e2e.js index 53828db5..8e3114b8 100644 --- a/cypress/support/e2e.js +++ b/cypress/support/e2e.js @@ -51,7 +51,7 @@ beforeEach(() => { contentWindow.TOP_LEFT_BLOCK_CONTROL_COUNT = 6; // add leaflet-geoman toolbar - map.pm.addControls(); + map.geoman.addControls(); }, }); diff --git a/demo/customcontrols.js b/demo/customcontrols.js index 277b0d3b..43ebb6eb 100644 --- a/demo/customcontrols.js +++ b/demo/customcontrols.js @@ -11,7 +11,7 @@ new TileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { '© OpenStreetMap contributors', }).addTo(map); -map.pm.addControls({ +map.geoman.addControls({ position: 'topleft', drawControls: false, editControls: true, @@ -21,7 +21,7 @@ map.pm.addControls({ }); // Click button -> toggle disabled -map.pm.Toolbar.createCustomControl({ +map.geoman.Toolbar.createCustomControl({ name: 'alertBox', block: 'custom', className: 'leaflet-geoman-icon-marker xyz-class', @@ -42,19 +42,19 @@ const _actions = [ name: 'actionName', }, ]; -map.pm.Toolbar.copyDrawControl('Rectangle', { +map.geoman.Toolbar.copyDrawControl('Rectangle', { name: 'RectangleCopy', block: 'custom', title: 'Display text on hover button', actions: _actions, }); -map.pm.Draw.RectangleCopy.setPathOptions({ color: 'green' }); +map.geoman.Draw.RectangleCopy.setPathOptions({ color: 'green' }); -map.pm.Toolbar.changeControlOrder(['RectangleCopy']); +map.geoman.Toolbar.changeControlOrder(['RectangleCopy']); -map.on('pm:actionclick', (e) => { +map.on('geoman:actionclick', (e) => { console.log(e); }); -map.on('pm:buttonclick', (e) => { +map.on('geoman:buttonclick', (e) => { console.log(e); }); diff --git a/demo/demo-canvas.js b/demo/demo-canvas.js index 75cb424c..f3127a1f 100644 --- a/demo/demo-canvas.js +++ b/demo/demo-canvas.js @@ -42,59 +42,59 @@ const map4 = new LeafletMap('example4', { preferCanvas: true }) .addLayer(tiles3); // map2.dragging.disable(); -// map2.on('pm:create', function(e) { -// // alert('pm:create event fired. See console for details'); +// map2.on('geoman:create', function(e) { +// // alert('geoman:create event fired. See console for details'); // console.log(e); // const layer = e.layer; -// layer.on('pm:cut', function(ev) { +// layer.on('geoman:cut', function(ev) { // console.log('cut event on layer'); // console.log(ev); // }); // }); -// map2.on('pm:cut', function(e) { +// map2.on('geoman:cut', function(e) { // console.log('cut event on map'); // console.log(e); // }); -// map2.on('pm:remove', function(e) { -// console.log('pm:remove event fired. See console for details'); -// // alert('pm:remove event fired. See console for details'); +// map2.on('geoman:remove', function(e) { +// console.log('geoman:remove event fired. See console for details'); +// // alert('geoman:remove event fired. See console for details'); // console.log(e); // }); -// map2.on('pm:drawstart', function(e) { +// map2.on('geoman:drawstart', function(e) { // console.log(e); // console.log(e.workingLayer); // }); const m1 = new CircleMarker([51.50313, -0.091223], { radius: 10 }); const m2 = new Marker([51.50614, -0.0989]); -const m3 = new Marker([51.50915, -0.096112], { pmIgnore: true }); +const m3 = new Marker([51.50915, -0.096112], { geomanIgnore: true }); const mGroup = new LayerGroup([m1, m2, m3]).addTo(map2); -mGroup.pm.enable(); +mGroup.geoman.enable(); -map2.pm.addControls({ +map2.geoman.addControls({ drawMarker: false, drawPolygon: true, editMode: false, drawPolyline: false, removalMode: true, }); -// map2.pm.addControls({ +// map2.geoman.addControls({ // drawMarker: false, // drawPolygon: true, // editMode: false, // drawPolyline: false, // removalMode: false, // }); -// map2.pm.addControls({ +// map2.geoman.addControls({ // drawMarker: true, // drawPolygon: false, // editMode: false, // drawPolyline: false, // removalMode: true, // }); -map2.pm.addControls({ +map2.geoman.addControls({ drawMarker: true, drawPolygon: true, editMode: true, @@ -102,16 +102,16 @@ map2.pm.addControls({ removalMode: true, }); -map2.pm.disableDraw(); -// map2.pm.enableDraw('Circle', { +map2.geoman.disableDraw(); +// map2.geoman.enableDraw('Circle', { // snappable: true, // cursorMarker: true // }); -map2.pm.enableDraw('Polyline', { allowSelfIntersection: false }); -map2.pm.enableDraw('Polygon', { allowSelfIntersection: false }); +map2.geoman.enableDraw('Polyline', { allowSelfIntersection: false }); +map2.geoman.enableDraw('Polygon', { allowSelfIntersection: false }); -map2.on('pm:globaleditmodetoggled', (e) => { +map2.on('geoman:globaleditmodetoggled', (e) => { console.log(e); }); @@ -142,15 +142,15 @@ const geoJsonData = { }; // const geoJsonButton = document.getElementById('test-geojson'); -const geoJsonLayer = new GeoJSON(null, { pmIgnore: false }); +const geoJsonLayer = new GeoJSON(null, { geomanIgnore: false }); geoJsonLayer.addTo(map2); geoJsonLayer.addData(geoJsonData); -// geoJsonLayer.pm.toggleEdit({ +// geoJsonLayer.geoman.toggleEdit({ // draggable: true, // snappable: true, // }); -map3.pm.addControls({ +map3.geoman.addControls({ drawMarker: true, drawPolygon: true, editMode: true, @@ -163,7 +163,7 @@ const markerStyle = { draggable: false, }; -map3.pm.enableDraw('Polygon', { +map3.geoman.enableDraw('Polygon', { snappable: true, templineStyle: { color: 'blue', @@ -203,34 +203,34 @@ const bounds = scotland.getBounds(); map3.fitBounds(bounds); geoJsonLayer.on('click', () => { - geoJsonLayer.pm.toggleEdit(); + geoJsonLayer.geoman.toggleEdit(); }); -geoJsonLayer.on('pm:edit', (e) => { +geoJsonLayer.on('geoman:edit', (e) => { console.log(e); }); -geoJsonLayer.on('pm:dragstart', (e) => { +geoJsonLayer.on('geoman:dragstart', (e) => { console.log(e); }); -// geoJsonLayer.on('pm:drag', function(e) { +// geoJsonLayer.on('geoman:drag', function(e) { // console.log(e); // }); -geoJsonLayer.on('pm:dragend', (e) => { +geoJsonLayer.on('geoman:dragend', (e) => { console.log(e); }); -map2.on('pm:drawstart', (e) => { +map2.on('geoman:drawstart', (e) => { const layer = e.workingLayer; // console.log(layer); - layer.on('pm:centerplaced', (x) => { + layer.on('geoman:centerplaced', (x) => { console.log(x); }); }); -map2.on('pm:create', (e) => { +map2.on('geoman:create', (e) => { const { layer } = e; // console.log(layer); - layer.on('pm:centerplaced', (x) => { + layer.on('geoman:centerplaced', (x) => { console.log(x); }); }); @@ -244,57 +244,57 @@ const polygonLayer = new Polygon([ ]) .addTo(map3) .addTo(map2); -polygonLayer.pm.toggleEdit({ +polygonLayer.geoman.toggleEdit({ allowSelfIntersection: false, }); -polygonLayer.on('pm:update', (e) => { +polygonLayer.on('geoman:update', (e) => { console.log(e); }); -polygonLayer.on('pm:intersect', (e) => { +polygonLayer.on('geoman:intersect', (e) => { console.log(e); }); -map2.pm.toggleGlobalEditMode({ +map2.geoman.toggleGlobalEditMode({ allowSelfIntersection: false, }); -map2.pm.disableGlobalEditMode(); +map2.geoman.disableGlobalEditMode(); -map2.on('pm:create', (e) => { - e.layer.pm.enable({ allowSelfIntersection: false }); - // e.layer.pm.disable(); - // console.log(e.layer.pm.hasSelfIntersection()); +map2.on('geoman:create', (e) => { + e.layer.geoman.enable({ allowSelfIntersection: false }); + // e.layer.geoman.disable(); + // console.log(e.layer.geoman.hasSelfIntersection()); - e.layer.on('pm:vertexdragend', (x) => { + e.layer.on('geoman:vertexdragend', (x) => { console.log(x); }); - e.layer.on('pm:update', (x) => { + e.layer.on('geoman:update', (x) => { console.log(x); }); - e.layer.on('pm:cut', (x) => { + e.layer.on('geoman:cut', (x) => { console.log(x); }); }); -map2.on('pm:drawstart', (e) => { +map2.on('geoman:drawstart', (e) => { const layer = e.workingLayer; - layer.on('pm:vertexadded', (x) => { + layer.on('geoman:vertexadded', (x) => { console.log(x); - console.log(x.workingLayer.pm.hasSelfIntersection()); + console.log(x.workingLayer.geoman.hasSelfIntersection()); }); }); -polygonLayer.on('pm:vertexadded', (x) => { +polygonLayer.on('geoman:vertexadded', (x) => { console.log(x); }); -polygonLayer.on('pm:vertexremoved', (x) => { +polygonLayer.on('geoman:vertexremoved', (x) => { console.log(x); }); -polygonLayer.on('pm:vertexdragstart', (x) => { +polygonLayer.on('geoman:vertexdragstart', (x) => { console.log(x); }); @@ -335,7 +335,7 @@ const feature = { }; const layerGroup = new FeatureGroup([layerGroupItem1]).addTo(map4); -layerGroup.pm.toggleEdit({ +layerGroup.geoman.toggleEdit({ draggable: true, snappable: true, snapDistance: 30, @@ -347,30 +347,30 @@ layerGroup.addLayer(someLayer); someLayer.addData(feature); console.log(layerGroup); -layerGroup.on('pm:snap', (e) => { +layerGroup.on('geoman:snap', (e) => { console.log('snap'); console.log(e); }); -layerGroup.on('pm:unsnap', (e) => { +layerGroup.on('geoman:unsnap', (e) => { console.log('unsnap'); console.log(e); }); -map4.pm.addControls({ +map4.geoman.addControls({ position: 'topright', }); -map4.pm.enableDraw('Polygon', { +map4.geoman.enableDraw('Polygon', { finishOn: 'pointerout', }); -map4.pm.disableDraw(); +map4.geoman.disableDraw(); -map4.pm.enableDraw('Marker', { +map4.geoman.enableDraw('Marker', { snappable: false, }); -map4.pm.disableDraw(); +map4.geoman.disableDraw(); -// map4.pm.setPathOptions({ +// map4.geoman.setPathOptions({ // color: 'orange', // fillColor: 'green', // fillOpacity: 0.4, @@ -381,19 +381,19 @@ layerGroup.addLayer(layerGroupItem3); // layerGroup.addLayer(layerGroupItem4); // layerGroup.addLayer(layerGroupItem5); -layerGroup.on('pm:dragstart', (e) => { +layerGroup.on('geoman:dragstart', (e) => { console.log(e); }); -layerGroup.on('pm:drag', (e) => { +layerGroup.on('geoman:drag', (e) => { console.log(e); }); -layerGroup.on('pm:dragend', (e) => { +layerGroup.on('geoman:dragend', (e) => { console.log(e); }); -layerGroup.on('pm:vertexdragstart', (e) => { +layerGroup.on('geoman:vertexdragstart', (e) => { console.log(e); }); -layerGroup.on('pm:vertexdragend', (e) => { +layerGroup.on('geoman:vertexdragend', (e) => { console.log(e); }); diff --git a/demo/demo.js b/demo/demo.js index d06aa6df..3382e369 100644 --- a/demo/demo.js +++ b/demo/demo.js @@ -43,59 +43,59 @@ const map4 = new LeafletMap('example4') .addLayer(tiles3); // map2.dragging.disable(); -// map2.on('pm:create', function(e) { -// // alert('pm:create event fired. See console for details'); +// map2.on('geoman:create', function(e) { +// // alert('geoman:create event fired. See console for details'); // console.log(e); // const layer = e.layer; -// layer.on('pm:cut', function(ev) { +// layer.on('geoman:cut', function(ev) { // console.log('cut event on layer'); // console.log(ev); // }); // }); -// map2.on('pm:cut', function(e) { +// map2.on('geoman:cut', function(e) { // console.log('cut event on map'); // console.log(e); // }); -// map2.on('pm:remove', function(e) { -// console.log('pm:remove event fired. See console for details'); -// // alert('pm:remove event fired. See console for details'); +// map2.on('geoman:remove', function(e) { +// console.log('geoman:remove event fired. See console for details'); +// // alert('geoman:remove event fired. See console for details'); // console.log(e); // }); -// map2.on('pm:drawstart', function(e) { +// map2.on('geoman:drawstart', function(e) { // console.log(e); // console.log(e.workingLayer); // }); const m1 = new CircleMarker([51.50313, -0.091223], { radius: 10 }); const m2 = new Marker([51.50614, -0.0989]); -const m3 = new Marker([51.50915, -0.096112], { pmIgnore: true }); +const m3 = new Marker([51.50915, -0.096112], { geomanIgnore: true }); const mGroup = new LayerGroup([m1, m2, m3]).addTo(map2); -// mGroup.pm.enable(); +// mGroup.geoman.enable(); -map2.pm.addControls({ +map2.geoman.addControls({ drawMarker: false, drawPolygon: true, editMode: false, drawPolyline: false, removalMode: true, }); -// map2.pm.addControls({ +// map2.geoman.addControls({ // drawMarker: false, // drawPolygon: true, // editMode: false, // drawPolyline: false, // removalMode: false, // }); -// map2.pm.addControls({ +// map2.geoman.addControls({ // drawMarker: true, // drawPolygon: false, // editMode: false, // drawPolyline: false, // removalMode: true, // }); -map2.pm.addControls({ +map2.geoman.addControls({ drawMarker: true, drawPolygon: true, editMode: true, @@ -103,16 +103,16 @@ map2.pm.addControls({ removalMode: true, }); -// map2.pm.disableDraw(); -// map2.pm.enableDraw('Circle', { +// map2.geoman.disableDraw(); +// map2.geoman.enableDraw('Circle', { // snappable: true, // cursorMarker: true // }); -// map2.pm.enableDraw('Polyline', { allowSelfIntersection: false }); -// map2.pm.enableDraw('Polygon', { allowSelfIntersection: false }); +// map2.geoman.enableDraw('Polyline', { allowSelfIntersection: false }); +// map2.geoman.enableDraw('Polygon', { allowSelfIntersection: false }); -map2.on('pm:globaleditmodetoggled', (e) => { +map2.on('geoman:globaleditmodetoggled', (e) => { console.log(e); }); @@ -223,25 +223,25 @@ map2.fitBounds(b); console.log(theCollection); -theCollection.on('pm:edit', (e) => { +theCollection.on('geoman:edit', (e) => { console.log(e); }); -theCollection.on('pm:dragstart', (e) => { +theCollection.on('geoman:dragstart', (e) => { console.log(e); }); // const geoJsonButton = document.getElementById('test-geojson'); -// const geoJsonLayer = L.geoJson(null, { pmIgnore: false }); +// const geoJsonLayer = L.geoJson(null, { geomanIgnore: false }); // geoJsonLayer.addTo(map2); // geoJsonLayer.addData(geoJsonData); -// geoJsonLayer.pm.toggleEdit({ +// geoJsonLayer.geoman.toggleEdit({ // draggable: true, // snappable: true, // }); -map3.pm.addControls({ +map3.geoman.addControls({ drawMarker: true, drawPolygon: true, editMode: true, @@ -254,7 +254,7 @@ const markerStyle = { draggable: false, }; -map3.pm.enableDraw('Polygon', { +map3.geoman.enableDraw('Polygon', { snappable: true, templineStyle: { color: 'blue', @@ -294,24 +294,24 @@ const bounds = scotland.getBounds(); map3.fitBounds(bounds); // geoJsonLayer.addEventListener('click', function(e) { -// geoJsonLayer.pm.toggleEdit(); +// geoJsonLayer.geoman.toggleEdit(); // }); -// geoJsonLayer.on('pm:drag', function(e) { +// geoJsonLayer.on('geoman:drag', function(e) { // console.log(e); // }); -map2.on('pm:drawstart', (e) => { +map2.on('geoman:drawstart', (e) => { const layer = e.workingLayer; // console.log(layer); - layer.on('pm:centerplaced', (x) => { + layer.on('geoman:centerplaced', (x) => { console.log(x); }); }); -map2.on('pm:create', (e) => { +map2.on('geoman:create', (e) => { const { layer } = e; // console.log(layer); - layer.on('pm:centerplaced', (x) => { + layer.on('geoman:centerplaced', (x) => { console.log(x); }); }); @@ -326,66 +326,66 @@ const polygonLayer = new Polygon([ .addTo(map3) .addTo(map2); -// polygonLayer.pm.toggleEdit({ +// polygonLayer.geoman.toggleEdit({ // allowSelfIntersection: false, // preventVertexEdit: true, // preventMarkerRemoval: false, // }); -polygonLayer.on('pm:update', (e) => { +polygonLayer.on('geoman:update', (e) => { console.log(e); }); -polygonLayer.on('pm:intersect', (e) => { +polygonLayer.on('geoman:intersect', (e) => { console.log(e); }); -// map2.pm.toggleGlobalEditMode({ +// map2.geoman.toggleGlobalEditMode({ // allowSelfIntersection: false, // preventMarkerRemoval: false, // preventVertexEdit: false, // }); -// map2.pm.disableGlobalEditMode(); +// map2.geoman.disableGlobalEditMode(); -map2.pm.enableDraw('Polygon', { allowSelfIntersection: false }); -map2.pm.disableDraw(); -map2.pm.enableDraw('Polyline', { allowSelfIntersection: false }); -map2.pm.disableDraw(); +map2.geoman.enableDraw('Polygon', { allowSelfIntersection: false }); +map2.geoman.disableDraw(); +map2.geoman.enableDraw('Polyline', { allowSelfIntersection: false }); +map2.geoman.disableDraw(); -map2.on('pm:create', (e) => { - // e.layer.pm.enable({ allowSelfIntersection: false }); - // e.layer.pm.disable(); - // console.log(e.layer.pm.hasSelfIntersection()); +map2.on('geoman:create', (e) => { + // e.layer.geoman.enable({ allowSelfIntersection: false }); + // e.layer.geoman.disable(); + // console.log(e.layer.geoman.hasSelfIntersection()); - e.layer.on('pm:vertexdragend', (x) => { + e.layer.on('geoman:vertexdragend', (x) => { console.log(x); }); - e.layer.on('pm:update', (x) => { + e.layer.on('geoman:update', (x) => { console.log(x); }); - e.layer.on('pm:cut', (x) => { + e.layer.on('geoman:cut', (x) => { console.log(x); }); }); -map2.on('pm:drawstart', (e) => { +map2.on('geoman:drawstart', (e) => { const layer = e.workingLayer; - layer.on('pm:vertexadded', (x) => { + layer.on('geoman:vertexadded', (x) => { console.log(x); - console.log(x.workingLayer.pm.hasSelfIntersection()); + console.log(x.workingLayer.geoman.hasSelfIntersection()); }); }); -polygonLayer.on('pm:vertexadded', (e) => { +polygonLayer.on('geoman:vertexadded', (e) => { console.log(e); }); -polygonLayer.on('pm:vertexremoved', (e) => { +polygonLayer.on('geoman:vertexremoved', (e) => { console.log(e); }); -polygonLayer.on('pm:vertexdragstart', (e) => { +polygonLayer.on('geoman:vertexdragstart', (e) => { console.log(e); }); @@ -397,7 +397,7 @@ const layerGroupItem1 = new Polyline( [51.513, -0.08], [51.514, -0.11], ], - { pmIgnore: true } + { geomanIgnore: true } ); const layerGroupItem2 = new Polygon([ [51.52, -0.06], @@ -429,7 +429,7 @@ const feature = { }; const layerGroup = new FeatureGroup([layerGroupItem1]).addTo(map4); -layerGroup.pm.toggleEdit({ +layerGroup.geoman.toggleEdit({ draggable: true, snappable: true, snapDistance: 30, @@ -440,30 +440,30 @@ layerGroup.addLayer(someLayer); someLayer.addData(feature); -layerGroup.on('pm:snap', (e) => { +layerGroup.on('geoman:snap', (e) => { console.log('snap'); console.log(e); }); -layerGroup.on('pm:unsnap', (e) => { +layerGroup.on('geoman:unsnap', (e) => { console.log('unsnap'); console.log(e); }); -map4.pm.addControls({ +map4.geoman.addControls({ position: 'topright', }); -map4.pm.enableDraw('Polygon', { +map4.geoman.enableDraw('Polygon', { finishOn: 'pointerout', }); -map4.pm.disableDraw(); +map4.geoman.disableDraw(); -map4.pm.enableDraw('Marker', { +map4.geoman.enableDraw('Marker', { snappable: false, }); -map4.pm.disableDraw(); +map4.geoman.disableDraw(); -// map4.pm.setPathOptions({ +// map4.geoman.setPathOptions({ // color: 'orange', // fillColor: 'green', // fillOpacity: 0.4, @@ -474,19 +474,19 @@ layerGroup.addLayer(layerGroupItem3); // layerGroup.addLayer(layerGroupItem4); // layerGroup.addLayer(layerGroupItem5); -layerGroup.on('pm:dragstart', (e) => { +layerGroup.on('geoman:dragstart', (e) => { console.log(e); }); -layerGroup.on('pm:drag', (e) => { +layerGroup.on('geoman:drag', (e) => { console.log(e); }); -layerGroup.on('pm:dragend', (e) => { +layerGroup.on('geoman:dragend', (e) => { console.log(e); }); -layerGroup.on('pm:vertexdragstart', (e) => { +layerGroup.on('geoman:vertexdragstart', (e) => { console.log(e); }); -layerGroup.on('pm:vertexdragend', (e) => { +layerGroup.on('geoman:vertexdragend', (e) => { console.log(e); }); diff --git a/demo/events.js b/demo/events.js index c949675f..6a35dd10 100644 --- a/demo/events.js +++ b/demo/events.js @@ -5,8 +5,8 @@ Geoman.initialize(); const map = new LeafletMap('map').setView([39.74739, -105], 13); -map.pm.addControls(); -map.pm.setLang('de'); +map.geoman.addControls(); +map.geoman.setLang('de'); new TileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, @@ -18,70 +18,70 @@ function logEvent(e) { console.log(e); } -map.on('pm:drawstart', (e) => { +map.on('geoman:drawstart', (e) => { logEvent(e); const layer = e.workingLayer; - layer.on('pm:vertexadded', logEvent); - layer.on('pm:snapdrag', logEvent); - layer.on('pm:snap', logEvent); - layer.on('pm:unsnap', logEvent); - layer.on('pm:centerplaced', logEvent); + layer.on('geoman:vertexadded', logEvent); + layer.on('geoman:snapdrag', logEvent); + layer.on('geoman:snap', logEvent); + layer.on('geoman:unsnap', logEvent); + layer.on('geoman:centerplaced', logEvent); }); -map.on('pm:drawend', logEvent); -map.on('pm:create', (e) => { +map.on('geoman:drawend', logEvent); +map.on('geoman:create', (e) => { logEvent(e); const { layer } = e; - map.pm.disableDraw(); + map.geoman.disableDraw(); - layer.pm.enable({ + layer.geoman.enable({ allowSelfIntersection: false, }); // Edit Event - layer.on('pm:edit', logEvent); - layer.on('pm:update', logEvent); - layer.on('pm:enable', logEvent); - layer.on('pm:disable', logEvent); - layer.on('pm:vertexadded', logEvent); - layer.on('pm:vertexremoved', logEvent); - layer.on('pm:vertexdragstart', logEvent); - layer.on('pm:vertexdrag', logEvent); - layer.on('pm:vertexdragend', logEvent); - layer.on('pm:snap', logEvent); - layer.on('pm:snapdrag', logEvent); - layer.on('pm:unsnap', logEvent); - layer.on('pm:intersect', logEvent); - layer.on('pm:centerplaced', logEvent); + layer.on('geoman:edit', logEvent); + layer.on('geoman:update', logEvent); + layer.on('geoman:enable', logEvent); + layer.on('geoman:disable', logEvent); + layer.on('geoman:vertexadded', logEvent); + layer.on('geoman:vertexremoved', logEvent); + layer.on('geoman:vertexdragstart', logEvent); + layer.on('geoman:vertexdrag', logEvent); + layer.on('geoman:vertexdragend', logEvent); + layer.on('geoman:snap', logEvent); + layer.on('geoman:snapdrag', logEvent); + layer.on('geoman:unsnap', logEvent); + layer.on('geoman:intersect', logEvent); + layer.on('geoman:centerplaced', logEvent); // Drag event - layer.on('pm:dragstart', logEvent); - layer.on('pm:drag', logEvent); - layer.on('pm:dragend', logEvent); + layer.on('geoman:dragstart', logEvent); + layer.on('geoman:drag', logEvent); + layer.on('geoman:dragend', logEvent); // Cut event - layer.on('pm:cut', logEvent); + layer.on('geoman:cut', logEvent); // Remove event - layer.on('pm:remove', logEvent); + layer.on('geoman:remove', logEvent); }); // Toggle mode events -map.on('pm:globaleditmodetoggled', logEvent); -map.on('pm:globaldragmodetoggled', logEvent); -map.on('pm:globalremovalmodetoggled', logEvent); -map.on('pm:globaldrawmodetoggled', logEvent); -map.on('pm:globalcutmodetoggled', logEvent); +map.on('geoman:globaleditmodetoggled', logEvent); +map.on('geoman:globaldragmodetoggled', logEvent); +map.on('geoman:globalremovalmodetoggled', logEvent); +map.on('geoman:globaldrawmodetoggled', logEvent); +map.on('geoman:globalcutmodetoggled', logEvent); // Remove event -map.on('pm:remove', logEvent); +map.on('geoman:remove', logEvent); map.on('layerremove', logEvent); // Cut event -map.on('pm:cut', logEvent); +map.on('geoman:cut', logEvent); // Language changed -map.on('pm:langchange', logEvent); +map.on('geoman:langchange', logEvent); -map.pm.setLang('en'); +map.geoman.setLang('en'); diff --git a/leaflet-geoman.d.ts b/leaflet-geoman.d.ts index 11c63987..94dec092 100644 --- a/leaflet-geoman.d.ts +++ b/leaflet-geoman.d.ts @@ -6,7 +6,7 @@ declare module 'leaflet' { * Extends built in leaflet Layer Options. */ interface LayerOptions { - pmIgnore?: boolean; + geomanIgnore?: boolean; snapIgnore?: boolean; /** Layers can be excluded from splitting with splitMark: false and splitOnlyMarkedLayers: false. Or included with splitMark: true and splitOnlyMarkedLayers: true. ⭐ */ splitMark?: boolean; @@ -16,34 +16,34 @@ declare module 'leaflet' { * Extends built in leaflet Map Options. */ interface MapOptions { - pmIgnore?: boolean; + geomanIgnore?: boolean; } /** * Extends built in leaflet Map. */ interface Map { - pm: PM.PMMap; + geoman: Geoman.GeomanMap; } /** * Extends built in leaflet Path. */ interface Path { - pm: PM.PMLayer; + geoman: Geoman.GeomanLayer; } /** * Extends built in leaflet ImageOverlay. */ interface ImageOverlay { - pm: PM.PMLayer; + geoman: Geoman.GeomanLayer; } /** * Extends built in leaflet LayerGroup. */ interface LayerGroup { - pm: PM.PMLayerGroup; + geoman: Geoman.GeomanLayerGroup; } /** @@ -61,7 +61,7 @@ declare module 'leaflet' { * Extends built in leaflet Marker. */ interface Marker { - pm: PM.PMLayer; + geoman: Geoman.GeomanLayer; } /** @@ -80,69 +80,69 @@ declare module 'leaflet' { ********************************************/ /** Fired when a layer is removed via Removal Mode. */ - on(type: 'pm:remove', fn: PM.RemoveEventHandler): this; - once(type: 'pm:remove', fn: PM.RemoveEventHandler): this; - off(type: 'pm:remove', fn?: PM.RemoveEventHandler): this; + on(type: 'geoman:remove', fn: Geoman.RemoveEventHandler): this; + once(type: 'geoman:remove', fn: Geoman.RemoveEventHandler): this; + off(type: 'geoman:remove', fn?: Geoman.RemoveEventHandler): this; /** Fired when the layer being cut. Draw+Edit Mode*/ - on(type: 'pm:cut', fn: PM.CutEventHandler): this; - once(type: 'pm:cut', fn: PM.CutEventHandler): this; - off(type: 'pm:cut', fn?: PM.CutEventHandler): this; + on(type: 'geoman:cut', fn: Geoman.CutEventHandler): this; + once(type: 'geoman:cut', fn: Geoman.CutEventHandler): this; + off(type: 'geoman:cut', fn?: Geoman.CutEventHandler): this; /** Fired when the layer being split. Draw+Edit Mode ⭐*/ - on(type: 'pm:split', fn: PM.SplitEventHandler): this; - once(type: 'pm:split', fn: PM.SplitEventHandler): this; - off(type: 'pm:split', fn?: PM.SplitEventHandler): this; + on(type: 'geoman:split', fn: Geoman.SplitEventHandler): this; + once(type: 'geoman:split', fn: Geoman.SplitEventHandler): this; + off(type: 'geoman:split', fn?: Geoman.SplitEventHandler): this; /** Fired when rotation is enabled for a layer. */ - on(type: 'pm:rotateenable', fn: PM.RotateEnableEventHandler): this; - once(type: 'pm:rotateenable', fn: PM.RotateEnableEventHandler): this; - off(type: 'pm:rotateenable', fn?: PM.RotateEnableEventHandler): this; + on(type: 'geoman:rotateenable', fn: Geoman.RotateEnableEventHandler): this; + once(type: 'geoman:rotateenable', fn: Geoman.RotateEnableEventHandler): this; + off(type: 'geoman:rotateenable', fn?: Geoman.RotateEnableEventHandler): this; /** Fired when rotation is disabled for a layer. */ - on(type: 'pm:rotatedisable', fn: PM.RotateDisableEventHandler): this; - once(type: 'pm:rotatedisable', fn: PM.RotateDisableEventHandler): this; - off(type: 'pm:rotatedisable', fn?: PM.RotateDisableEventHandler): this; + on(type: 'geoman:rotatedisable', fn: Geoman.RotateDisableEventHandler): this; + once(type: 'geoman:rotatedisable', fn: Geoman.RotateDisableEventHandler): this; + off(type: 'geoman:rotatedisable', fn?: Geoman.RotateDisableEventHandler): this; /** Fired when rotation starts on a layer. */ - on(type: 'pm:rotatestart', fn: PM.RotateStartEventHandler): this; - once(type: 'pm:rotatestart', fn: PM.RotateStartEventHandler): this; - off(type: 'pm:rotatestart', fn?: PM.RotateStartEventHandler): this; + on(type: 'geoman:rotatestart', fn: Geoman.RotateStartEventHandler): this; + once(type: 'geoman:rotatestart', fn: Geoman.RotateStartEventHandler): this; + off(type: 'geoman:rotatestart', fn?: Geoman.RotateStartEventHandler): this; /** Fired when a layer is rotated. */ - on(type: 'pm:rotate', fn: PM.RotateEventHandler): this; - once(type: 'pm:rotate', fn: PM.RotateEventHandler): this; - off(type: 'pm:rotate', fn?: PM.RotateEventHandler): this; + on(type: 'geoman:rotate', fn: Geoman.RotateEventHandler): this; + once(type: 'geoman:rotate', fn: Geoman.RotateEventHandler): this; + off(type: 'geoman:rotate', fn?: Geoman.RotateEventHandler): this; /** Fired when rotation ends on a layer. */ - on(type: 'pm:rotateend', fn: PM.RotateEndEventHandler): this; - once(type: 'pm:rotateend', fn: PM.RotateEndEventHandler): this; - off(type: 'pm:rotateend', fn?: PM.RotateEndEventHandler): this; + on(type: 'geoman:rotateend', fn: Geoman.RotateEndEventHandler): this; + once(type: 'geoman:rotateend', fn: Geoman.RotateEndEventHandler): this; + off(type: 'geoman:rotateend', fn?: Geoman.RotateEndEventHandler): this; /** Fired when scaling is enabled for a layer. */ - on(type: 'pm:scaleenable', fn: PM.ScaleEnableEventHandler): this; - once(type: 'pm:scaleenable', fn: PM.ScaleEnableEventHandler): this; - off(type: 'pm:scaleenable', fn?: PM.ScaleEnableEventHandler): this; + on(type: 'geoman:scaleenable', fn: Geoman.ScaleEnableEventHandler): this; + once(type: 'geoman:scaleenable', fn: Geoman.ScaleEnableEventHandler): this; + off(type: 'geoman:scaleenable', fn?: Geoman.ScaleEnableEventHandler): this; /** Fired when scaling is disabled for a layer. */ - on(type: 'pm:scaledisable', fn: PM.ScaleDisableEventHandler): this; - once(type: 'pm:scaledisable', fn: PM.ScaleDisableEventHandler): this; - off(type: 'pm:scaledisable', fn?: PM.ScaleDisableEventHandler): this; + on(type: 'geoman:scaledisable', fn: Geoman.ScaleDisableEventHandler): this; + once(type: 'geoman:scaledisable', fn: Geoman.ScaleDisableEventHandler): this; + off(type: 'geoman:scaledisable', fn?: Geoman.ScaleDisableEventHandler): this; /** Fired when scaling starts on a layer. */ - on(type: 'pm:scalestart', fn: PM.ScaleStartEventHandler): this; - once(type: 'pm:scalestart', fn: PM.ScaleStartEventHandler): this; - off(type: 'pm:scalestart', fn?: PM.ScaleStartEventHandler): this; + on(type: 'geoman:scalestart', fn: Geoman.ScaleStartEventHandler): this; + once(type: 'geoman:scalestart', fn: Geoman.ScaleStartEventHandler): this; + off(type: 'geoman:scalestart', fn?: Geoman.ScaleStartEventHandler): this; /** Fired when a layer is scaled. */ - on(type: 'pm:scale', fn: PM.ScaleEventHandler): this; - once(type: 'pm:scale', fn: PM.ScaleEventHandler): this; - off(type: 'pm:scale', fn?: PM.ScaleEventHandler): this; + on(type: 'geoman:scale', fn: Geoman.ScaleEventHandler): this; + once(type: 'geoman:scale', fn: Geoman.ScaleEventHandler): this; + off(type: 'geoman:scale', fn?: Geoman.ScaleEventHandler): this; /** Fired when scaling ends on a layer. */ - on(type: 'pm:scaleend', fn: PM.ScaleEndEventHandler): this; - once(type: 'pm:scaleend', fn: PM.ScaleEndEventHandler): this; - off(type: 'pm:scaleend', fn?: PM.ScaleEndEventHandler): this; + on(type: 'geoman:scaleend', fn: Geoman.ScaleEndEventHandler): this; + once(type: 'geoman:scaleend', fn: Geoman.ScaleEndEventHandler): this; + off(type: 'geoman:scaleend', fn?: Geoman.ScaleEndEventHandler): this; /****************************************** * @@ -151,24 +151,24 @@ declare module 'leaflet' { ********************************************/ /** Fired during a marker move/drag. */ - on(type: 'pm:snapdrag', fn: PM.SnapEventHandler): this; - once(type: 'pm:snapdrag', fn: PM.SnapEventHandler): this; - off(type: 'pm:snapdrag', fn?: PM.SnapEventHandler): this; + on(type: 'geoman:snapdrag', fn: Geoman.SnapEventHandler): this; + once(type: 'geoman:snapdrag', fn: Geoman.SnapEventHandler): this; + off(type: 'geoman:snapdrag', fn?: Geoman.SnapEventHandler): this; /** Fired when a vertex is snapped. */ - on(type: 'pm:snap', fn: PM.SnapEventHandler): this; - once(type: 'pm:snap', fn: PM.SnapEventHandler): this; - off(type: 'pm:snap', fn?: PM.SnapEventHandler): this; + on(type: 'geoman:snap', fn: Geoman.SnapEventHandler): this; + once(type: 'geoman:snap', fn: Geoman.SnapEventHandler): this; + off(type: 'geoman:snap', fn?: Geoman.SnapEventHandler): this; /** Fired when a vertex is unsnapped. */ - on(type: 'pm:unsnap', fn: PM.SnapEventHandler): this; - once(type: 'pm:unsnap', fn: PM.SnapEventHandler): this; - off(type: 'pm:unsnap', fn?: PM.SnapEventHandler): this; + on(type: 'geoman:unsnap', fn: Geoman.SnapEventHandler): this; + once(type: 'geoman:unsnap', fn: Geoman.SnapEventHandler): this; + off(type: 'geoman:unsnap', fn?: Geoman.SnapEventHandler): this; /** Called when the center of a circle is placed/moved. */ - on(type: 'pm:centerplaced', fn: PM.CenterPlacedEventHandler): this; - once(type: 'pm:centerplaced', fn: PM.CenterPlacedEventHandler): this; - off(type: 'pm:centerplaced', fn?: PM.CenterPlacedEventHandler): this; + on(type: 'geoman:centerplaced', fn: Geoman.CenterPlacedEventHandler): this; + once(type: 'geoman:centerplaced', fn: Geoman.CenterPlacedEventHandler): this; + off(type: 'geoman:centerplaced', fn?: Geoman.CenterPlacedEventHandler): this; /****************************************** * @@ -177,9 +177,9 @@ declare module 'leaflet' { ********************************************/ /** Fired when a layer is edited. */ - on(type: 'pm:edit', fn: PM.EditEventHandler): this; - once(type: 'pm:edit', fn: PM.EditEventHandler): this; - off(type: 'pm:edit', fn?: PM.EditEventHandler): this; + on(type: 'geoman:edit', fn: Geoman.EditEventHandler): this; + once(type: 'geoman:edit', fn: Geoman.EditEventHandler): this; + off(type: 'geoman:edit', fn?: Geoman.EditEventHandler): this; /****************************************** * @@ -189,65 +189,65 @@ declare module 'leaflet' { /** Fired when Drawing Mode is toggled. */ on( - type: 'pm:globaldrawmodetoggled', - fn: PM.GlobalDrawModeToggledEventHandler, + type: 'geoman:globaldrawmodetoggled', + fn: Geoman.GlobalDrawModeToggledEventHandler, context?: any ): L.Evented; once( - type: 'pm:globaldrawmodetoggled', - fn: PM.GlobalDrawModeToggledEventHandler, + type: 'geoman:globaldrawmodetoggled', + fn: Geoman.GlobalDrawModeToggledEventHandler, context?: any ): L.Evented; off( - type: 'pm:globaldrawmodetoggled', - fn?: PM.GlobalDrawModeToggledEventHandler, + type: 'geoman:globaldrawmodetoggled', + fn?: Geoman.GlobalDrawModeToggledEventHandler, context?: any ): L.Evented; /** Called when drawing mode is enabled. Payload includes the shape type and working layer. */ on( - type: 'pm:drawstart', - fn: PM.DrawStartEventHandler, + type: 'geoman:drawstart', + fn: Geoman.DrawStartEventHandler, context?: any ): L.Evented; once( - type: 'pm:drawstart', - fn: PM.DrawStartEventHandler, + type: 'geoman:drawstart', + fn: Geoman.DrawStartEventHandler, context?: any ): L.Evented; off( - type: 'pm:drawstart', - fn?: PM.DrawStartEventHandler, + type: 'geoman:drawstart', + fn?: Geoman.DrawStartEventHandler, context?: any ): L.Evented; /** Called when drawing mode is disabled. Payload includes the shape type. */ on( - type: 'pm:drawend', - fn: PM.DrawEndEventHandler, + type: 'geoman:drawend', + fn: Geoman.DrawEndEventHandler, context?: any ): L.Evented; once( - type: 'pm:drawend', - fn: PM.DrawEndEventHandler, + type: 'geoman:drawend', + fn: Geoman.DrawEndEventHandler, context?: any ): L.Evented; off( - type: 'pm:drawend', - fn?: PM.DrawEndEventHandler, + type: 'geoman:drawend', + fn?: Geoman.DrawEndEventHandler, context?: any ): L.Evented; /** Called when drawing mode is disabled. Payload includes the shape type. */ - on(type: 'pm:create', fn: PM.CreateEventHandler, context?: any): L.Evented; + on(type: 'geoman:create', fn: Geoman.CreateEventHandler, context?: any): L.Evented; once( - type: 'pm:create', - fn: PM.CreateEventHandler, + type: 'geoman:create', + fn: Geoman.CreateEventHandler, context?: any ): L.Evented; off( - type: 'pm:create', - fn?: PM.CreateEventHandler, + type: 'geoman:create', + fn?: Geoman.CreateEventHandler, context?: any ): L.Evented; @@ -258,9 +258,9 @@ declare module 'leaflet' { ********************************************/ /** Called when a new vertex is added. */ - on(type: 'pm:vertexadded', fn: PM.VertexAddedEventHandler): this; - once(type: 'pm:vertexadded', fn: PM.VertexAddedEventHandler): this; - off(type: 'pm:vertexadded', fn?: PM.VertexAddedEventHandler): this; + on(type: 'geoman:vertexadded', fn: Geoman.VertexAddedEventHandler): this; + once(type: 'geoman:vertexadded', fn: Geoman.VertexAddedEventHandler): this; + off(type: 'geoman:vertexadded', fn?: Geoman.VertexAddedEventHandler): this; /****************************************** * @@ -269,117 +269,117 @@ declare module 'leaflet' { ********************************************/ /** Fired when edit mode is disabled and a layer is edited and its coordinates have changed. */ - on(type: 'pm:update', fn: PM.UpdateEventHandler): this; - once(type: 'pm:update', fn: PM.UpdateEventHandler): this; - off(type: 'pm:update', fn?: PM.UpdateEventHandler): this; + on(type: 'geoman:update', fn: Geoman.UpdateEventHandler): this; + once(type: 'geoman:update', fn: Geoman.UpdateEventHandler): this; + off(type: 'geoman:update', fn?: Geoman.UpdateEventHandler): this; /** Fired when edit mode on a layer is enabled. */ - on(type: 'pm:enable', fn: PM.EnableEventHandler): this; - once(type: 'pm:enable', fn: PM.EnableEventHandler): this; - off(type: 'pm:enable', fn?: PM.EnableEventHandler): this; + on(type: 'geoman:enable', fn: Geoman.EnableEventHandler): this; + once(type: 'geoman:enable', fn: Geoman.EnableEventHandler): this; + off(type: 'geoman:enable', fn?: Geoman.EnableEventHandler): this; /** Fired when edit mode on a layer is disabled. */ - on(type: 'pm:disable', fn: PM.DisableEventHandler): this; - once(type: 'pm:disable', fn: PM.DisableEventHandler): this; - off(type: 'pm:disable', fn?: PM.DisableEventHandler): this; + on(type: 'geoman:disable', fn: Geoman.DisableEventHandler): this; + once(type: 'geoman:disable', fn: Geoman.DisableEventHandler): this; + off(type: 'geoman:disable', fn?: Geoman.DisableEventHandler): this; /** Fired when a vertex is added. */ - on(type: 'pm:vertexadded', fn: PM.VertexAddedEventHandler2): this; - once(type: 'pm:vertexadded', fn: PM.VertexAddedEventHandler2): this; - off(type: 'pm:vertexadded', fn?: PM.VertexAddedEventHandler2): this; + on(type: 'geoman:vertexadded', fn: Geoman.VertexAddedEventHandler2): this; + once(type: 'geoman:vertexadded', fn: Geoman.VertexAddedEventHandler2): this; + off(type: 'geoman:vertexadded', fn?: Geoman.VertexAddedEventHandler2): this; /** Fired when a vertex is removed. */ - on(type: 'pm:vertexremoved', fn: PM.VertexRemovedEventHandler): this; - once(type: 'pm:vertexremoved', fn: PM.VertexRemovedEventHandler): this; - off(type: 'pm:vertexremoved', fn?: PM.VertexRemovedEventHandler): this; + on(type: 'geoman:vertexremoved', fn: Geoman.VertexRemovedEventHandler): this; + once(type: 'geoman:vertexremoved', fn: Geoman.VertexRemovedEventHandler): this; + off(type: 'geoman:vertexremoved', fn?: Geoman.VertexRemovedEventHandler): this; /** Fired when a vertex is clicked. */ - on(type: 'pm:vertexclick', fn: PM.VertexClickEventHandler): this; - once(type: 'pm:vertexclick', fn: PM.VertexClickEventHandler): this; - off(type: 'pm:vertexclick', fn?: PM.VertexClickEventHandler): this; + on(type: 'geoman:vertexclick', fn: Geoman.VertexClickEventHandler): this; + once(type: 'geoman:vertexclick', fn: Geoman.VertexClickEventHandler): this; + off(type: 'geoman:vertexclick', fn?: Geoman.VertexClickEventHandler): this; /** Fired when dragging of a marker which corresponds to a vertex starts. */ - on(type: 'pm:vertexdragstart', fn: PM.VertexDragStartEventHandler): this; - once(type: 'pm:vertexdragstart', fn: PM.VertexDragStartEventHandler): this; - off(type: 'pm:vertexdragstart', fn?: PM.VertexDragStartEventHandler): this; + on(type: 'geoman:vertexdragstart', fn: Geoman.VertexDragStartEventHandler): this; + once(type: 'geoman:vertexdragstart', fn: Geoman.VertexDragStartEventHandler): this; + off(type: 'geoman:vertexdragstart', fn?: Geoman.VertexDragStartEventHandler): this; /** Fired when dragging a vertex-marker. */ - on(type: 'pm:vertexdrag', fn: PM.VertexDragEventHandler): this; - once(type: 'pm:vertexdrag', fn: PM.VertexDragEventHandler): this; - off(type: 'pm:vertexdrag', fn?: PM.VertexDragEventHandler): this; + on(type: 'geoman:vertexdrag', fn: Geoman.VertexDragEventHandler): this; + once(type: 'geoman:vertexdrag', fn: Geoman.VertexDragEventHandler): this; + off(type: 'geoman:vertexdrag', fn?: Geoman.VertexDragEventHandler): this; /** Fired when dragging of a vertex-marker ends. */ - on(type: 'pm:vertexdragend', fn: PM.VertexDragEndEventHandler): this; - once(type: 'pm:vertexdragend', fn: PM.VertexDragEndEventHandler): this; - off(type: 'pm:vertexdragend', fn?: PM.VertexDragEndEventHandler): this; + on(type: 'geoman:vertexdragend', fn: Geoman.VertexDragEndEventHandler): this; + once(type: 'geoman:vertexdragend', fn: Geoman.VertexDragEndEventHandler): this; + off(type: 'geoman:vertexdragend', fn?: Geoman.VertexDragEndEventHandler): this; /** Fired when coords of a layer are reset. E.g. by self-intersection. */ - on(type: 'pm:layerreset', fn: PM.LayerResetEventHandler): this; - once(type: 'pm:layerreset', fn: PM.LayerResetEventHandler): this; - off(type: 'pm:layerreset', fn?: PM.LayerResetEventHandler): this; + on(type: 'geoman:layerreset', fn: Geoman.LayerResetEventHandler): this; + once(type: 'geoman:layerreset', fn: Geoman.LayerResetEventHandler): this; + off(type: 'geoman:layerreset', fn?: Geoman.LayerResetEventHandler): this; /** When allowSelfIntersection: false, this event is fired as soon as a self-intersection is detected. */ - on(type: 'pm:intersect', fn: PM.IntersectEventHandler): this; - once(type: 'pm:intersect', fn: PM.IntersectEventHandler): this; - off(type: 'pm:intersect', fn?: PM.IntersectEventHandler): this; + on(type: 'geoman:intersect', fn: Geoman.IntersectEventHandler): this; + once(type: 'geoman:intersect', fn: Geoman.IntersectEventHandler): this; + off(type: 'geoman:intersect', fn?: Geoman.IntersectEventHandler): this; /** Fired coordinates of the layer changed. */ - on(type: 'pm:change', fn: PM.ChangeEventHandler): this; - once(type: 'pm:change', fn: PM.ChangeEventHandler): this; - off(type: 'pm:change', fn?: PM.ChangeEventHandler): this; + on(type: 'geoman:change', fn: Geoman.ChangeEventHandler): this; + once(type: 'geoman:change', fn: Geoman.ChangeEventHandler): this; + off(type: 'geoman:change', fn?: Geoman.ChangeEventHandler): this; /** Fired when the text of a layer is changed. */ - on(type: 'pm:textchange', fn: PM.TextChangeEventHandler): this; - once(type: 'pm:textchange', fn: PM.TextChangeEventHandler): this; - off(type: 'pm:textchange', fn?: PM.TextChangeEventHandler): this; + on(type: 'geoman:textchange', fn: Geoman.TextChangeEventHandler): this; + once(type: 'geoman:textchange', fn: Geoman.TextChangeEventHandler): this; + off(type: 'geoman:textchange', fn?: Geoman.TextChangeEventHandler): this; /** Fired when the text layer is focused. */ - on(type: 'pm:textfocus', fn: PM.TextFocusEventHandler): this; - once(type: 'pm:textfocus', fn: PM.TextFocusEventHandler): this; - off(type: 'pm:textfocus', fn?: PM.TextFocusEventHandler): this; + on(type: 'geoman:textfocus', fn: Geoman.TextFocusEventHandler): this; + once(type: 'geoman:textfocus', fn: Geoman.TextFocusEventHandler): this; + off(type: 'geoman:textfocus', fn?: Geoman.TextFocusEventHandler): this; /** Fired when the text layer is blurred. */ - on(type: 'pm:textblur', fn: PM.TextBlurEventHandler): this; - once(type: 'pm:textblur', fn: PM.TextBlurEventHandler): this; - off(type: 'pm:textblur', fn?: PM.TextBlurEventHandler): this; + on(type: 'geoman:textblur', fn: Geoman.TextBlurEventHandler): this; + once(type: 'geoman:textblur', fn: Geoman.TextBlurEventHandler): this; + off(type: 'geoman:textblur', fn?: Geoman.TextBlurEventHandler): this; /** Fired when the layer violates requireContainment. */ on( - type: 'pm:containmentviolation', - fn: PM.ContainmentViolationEventHandler + type: 'geoman:containmentviolation', + fn: Geoman.ContainmentViolationEventHandler ): this; once( - type: 'pm:containmentviolation', - fn: PM.ContainmentViolationEventHandler + type: 'geoman:containmentviolation', + fn: Geoman.ContainmentViolationEventHandler ): this; off( - type: 'pm:containmentviolation', - fn?: PM.ContainmentViolationEventHandler + type: 'geoman:containmentviolation', + fn?: Geoman.ContainmentViolationEventHandler ): this; /** Fired when the layer violates preventIntersection. */ on( - type: 'pm:intersectionviolation', - fn: PM.IntersectionViolationEventHandler + type: 'geoman:intersectionviolation', + fn: Geoman.IntersectionViolationEventHandler ): this; once( - type: 'pm:intersectionviolation', - fn: PM.IntersectionViolationEventHandler + type: 'geoman:intersectionviolation', + fn: Geoman.IntersectionViolationEventHandler ): this; off( - type: 'pm:intersectionviolation', - fn?: PM.IntersectionViolationEventHandler + type: 'geoman:intersectionviolation', + fn?: Geoman.IntersectionViolationEventHandler ): this; /** Fired when the layer changes are canceled. */ - on(type: 'pm:cancel', fn: PM.CancelEventHandler): this; - once(type: 'pm:cancel', fn: PM.CancelEventHandler): this; - off(type: 'pm:cancel', fn?: PM.CancelEventHandler): this; + on(type: 'geoman:cancel', fn: Geoman.CancelEventHandler): this; + once(type: 'geoman:cancel', fn: Geoman.CancelEventHandler): this; + off(type: 'geoman:cancel', fn?: Geoman.CancelEventHandler): this; /** Fired when the layer removing is canceled and the layer is re-added to the map. */ - on(type: 'pm:undoremove', fn: PM.UndoRemoveEventHandler): this; - once(type: 'pm:undoremove', fn: PM.UndoRemoveEventHandler): this; - off(type: 'pm:undoremove', fn?: PM.UndoRemoveEventHandler): this; + on(type: 'geoman:undoremove', fn: Geoman.UndoRemoveEventHandler): this; + once(type: 'geoman:undoremove', fn: Geoman.UndoRemoveEventHandler): this; + off(type: 'geoman:undoremove', fn?: Geoman.UndoRemoveEventHandler): this; /****************************************** * @@ -389,16 +389,16 @@ declare module 'leaflet' { /** Fired when Edit Mode is toggled. */ on( - type: 'pm:globaleditmodetoggled', - fn: PM.GlobalEditModeToggledEventHandler + type: 'geoman:globaleditmodetoggled', + fn: Geoman.GlobalEditModeToggledEventHandler ): this; once( - type: 'pm:globaleditmodetoggled', - fn: PM.GlobalEditModeToggledEventHandler + type: 'geoman:globaleditmodetoggled', + fn: Geoman.GlobalEditModeToggledEventHandler ): this; off( - type: 'pm:globaleditmodetoggled', - fn?: PM.GlobalEditModeToggledEventHandler + type: 'geoman:globaleditmodetoggled', + fn?: Geoman.GlobalEditModeToggledEventHandler ): this; /****************************************** @@ -409,16 +409,16 @@ declare module 'leaflet' { /** Fired when Drag Mode is toggled. */ on( - type: 'pm:globaldragmodetoggled', - fn: PM.GlobalDragModeToggledEventHandler + type: 'geoman:globaldragmodetoggled', + fn: Geoman.GlobalDragModeToggledEventHandler ): this; once( - type: 'pm:globaldragmodetoggled', - fn: PM.GlobalDragModeToggledEventHandler + type: 'geoman:globaldragmodetoggled', + fn: Geoman.GlobalDragModeToggledEventHandler ): this; off( - type: 'pm:globaldragmodetoggled', - fn?: PM.GlobalDragModeToggledEventHandler + type: 'geoman:globaldragmodetoggled', + fn?: Geoman.GlobalDragModeToggledEventHandler ): this; /****************************************** @@ -428,29 +428,29 @@ declare module 'leaflet' { ********************************************/ /** Fired when a layer starts being dragged. */ - on(type: 'pm:dragstart', fn: PM.DragStartEventHandler): this; - once(type: 'pm:dragstart', fn: PM.DragStartEventHandler): this; - off(type: 'pm:dragstart', fn?: PM.DragStartEventHandler): this; + on(type: 'geoman:dragstart', fn: Geoman.DragStartEventHandler): this; + once(type: 'geoman:dragstart', fn: Geoman.DragStartEventHandler): this; + off(type: 'geoman:dragstart', fn?: Geoman.DragStartEventHandler): this; /** Fired when a layer is dragged. */ - on(type: 'pm:drag', fn: PM.DragEventHandler): this; - once(type: 'pm:drag', fn: PM.DragEventHandler): this; - off(type: 'pm:drag', fn?: PM.DragEventHandler): this; + on(type: 'geoman:drag', fn: Geoman.DragEventHandler): this; + once(type: 'geoman:drag', fn: Geoman.DragEventHandler): this; + off(type: 'geoman:drag', fn?: Geoman.DragEventHandler): this; /** Fired when a layer stops being dragged. */ - on(type: 'pm:dragend', fn: PM.DragEndEventHandler): this; - once(type: 'pm:dragend', fn: PM.DragEndEventHandler): this; - off(type: 'pm:dragend', fn?: PM.DragEndEventHandler): this; + on(type: 'geoman:dragend', fn: Geoman.DragEndEventHandler): this; + once(type: 'geoman:dragend', fn: Geoman.DragEndEventHandler): this; + off(type: 'geoman:dragend', fn?: Geoman.DragEndEventHandler): this; /** Fired when drag mode on a layer is enabled. */ - on(type: 'pm:dragenable', fn: PM.DragEnableEventHandler): this; - once(type: 'pm:dragenable', fn: PM.DragEnableEventHandler): this; - off(type: 'pm:dragenable', fn?: PM.DragEnableEventHandler): this; + on(type: 'geoman:dragenable', fn: Geoman.DragEnableEventHandler): this; + once(type: 'geoman:dragenable', fn: Geoman.DragEnableEventHandler): this; + off(type: 'geoman:dragenable', fn?: Geoman.DragEnableEventHandler): this; /** Fired when drag mode on a layer is disabled. */ - on(type: 'pm:dragdisable', fn: PM.DragDisableEventHandler): this; - once(type: 'pm:dragdisable', fn: PM.DragDisableEventHandler): this; - off(type: 'pm:dragdisable', fn?: PM.DragDisableEventHandler): this; + on(type: 'geoman:dragdisable', fn: Geoman.DragDisableEventHandler): this; + once(type: 'geoman:dragdisable', fn: Geoman.DragDisableEventHandler): this; + off(type: 'geoman:dragdisable', fn?: Geoman.DragDisableEventHandler): this; /****************************************** * @@ -460,16 +460,16 @@ declare module 'leaflet' { /** Fired when Removal Mode is toggled. */ on( - type: 'pm:globalremovalmodetoggled', - fn: PM.GlobalRemovalModeToggledEventHandler + type: 'geoman:globalremovalmodetoggled', + fn: Geoman.GlobalRemovalModeToggledEventHandler ): this; once( - type: 'pm:globalremovalmodetoggled', - fn: PM.GlobalRemovalModeToggledEventHandler + type: 'geoman:globalremovalmodetoggled', + fn: Geoman.GlobalRemovalModeToggledEventHandler ): this; off( - type: 'pm:globalremovalmodetoggled', - fn?: PM.GlobalRemovalModeToggledEventHandler + type: 'geoman:globalremovalmodetoggled', + fn?: Geoman.GlobalRemovalModeToggledEventHandler ): this; /****************************************** @@ -480,16 +480,16 @@ declare module 'leaflet' { /** Fired when a layer is removed via Removal Mode. */ on( - type: 'pm:globalcutmodetoggled', - fn: PM.GlobalCutModeToggledEventHandler + type: 'geoman:globalcutmodetoggled', + fn: Geoman.GlobalCutModeToggledEventHandler ): this; once( - type: 'pm:globalcutmodetoggled', - fn: PM.GlobalCutModeToggledEventHandler + type: 'geoman:globalcutmodetoggled', + fn: Geoman.GlobalCutModeToggledEventHandler ): this; off( - type: 'pm:globalcutmodetoggled', - fn?: PM.GlobalCutModeToggledEventHandler + type: 'geoman:globalcutmodetoggled', + fn?: Geoman.GlobalCutModeToggledEventHandler ): this; /****************************************** @@ -500,16 +500,16 @@ declare module 'leaflet' { /** Fired when Rotate Mode is toggled. */ on( - type: 'pm:globalrotatemodetoggled', - fn: PM.GlobalRotateModeToggledEventHandler + type: 'geoman:globalrotatemodetoggled', + fn: Geoman.GlobalRotateModeToggledEventHandler ): this; once( - type: 'pm:globalrotatemodetoggled', - fn: PM.GlobalRotateModeToggledEventHandler + type: 'geoman:globalrotatemodetoggled', + fn: Geoman.GlobalRotateModeToggledEventHandler ): this; off( - type: 'pm:globalrotatemodetoggled', - fn?: PM.GlobalRotateModeToggledEventHandler + type: 'geoman:globalrotatemodetoggled', + fn?: Geoman.GlobalRotateModeToggledEventHandler ): this; /****************************************** @@ -520,22 +520,22 @@ declare module 'leaflet' { /** Fired when Union Mode is toggled. */ on( - type: 'pm:globalunionmodetoggled', - fn: PM.GlobalUnionModeToggledEventHandler + type: 'geoman:globalunionmodetoggled', + fn: Geoman.GlobalUnionModeToggledEventHandler ): this; once( - type: 'pm:globalunionmodetoggled', - fn: PM.GlobalUnionModeToggledEventHandler + type: 'geoman:globalunionmodetoggled', + fn: Geoman.GlobalUnionModeToggledEventHandler ): this; off( - type: 'pm:globalunionmodetoggled', - fn?: PM.GlobalUnionModeToggledEventHandler + type: 'geoman:globalunionmodetoggled', + fn?: Geoman.GlobalUnionModeToggledEventHandler ): this; /** Fired when Union is executed. */ - on(type: 'pm:union', fn: PM.UnionEventHandler): this; - once(type: 'pm:union', fn: PM.UnionEventHandler): this; - off(type: 'pm:union', fn: PM.UnionEventHandler): this; + on(type: 'geoman:union', fn: Geoman.UnionEventHandler): this; + once(type: 'geoman:union', fn: Geoman.UnionEventHandler): this; + off(type: 'geoman:union', fn: Geoman.UnionEventHandler): this; /****************************************** * @@ -545,22 +545,22 @@ declare module 'leaflet' { /** Fired when Difference Mode is toggled. */ on( - type: 'pm:globaldifferencemodetoggled', - fn: PM.GlobalDifferenceModeToggledEventHandler + type: 'geoman:globaldifferencemodetoggled', + fn: Geoman.GlobalDifferenceModeToggledEventHandler ): this; once( - type: 'pm:globaldifferencemodetoggled', - fn: PM.GlobalDifferenceModeToggledEventHandler + type: 'geoman:globaldifferencemodetoggled', + fn: Geoman.GlobalDifferenceModeToggledEventHandler ): this; off( - type: 'pm:globaldifferencemodetoggled', - fn?: PM.GlobalDifferenceModeToggledEventHandler + type: 'geoman:globaldifferencemodetoggled', + fn?: Geoman.GlobalDifferenceModeToggledEventHandler ): this; /** Fired when Difference is executed. */ - on(type: 'pm:difference', fn: PM.DifferenceEventHandler): this; - once(type: 'pm:difference', fn: PM.DifferenceEventHandler): this; - off(type: 'pm:difference', fn?: PM.DifferenceEventHandler): this; + on(type: 'geoman:difference', fn: Geoman.DifferenceEventHandler): this; + once(type: 'geoman:difference', fn: Geoman.DifferenceEventHandler): this; + off(type: 'geoman:difference', fn?: Geoman.DifferenceEventHandler): this; /****************************************** * @@ -569,14 +569,14 @@ declare module 'leaflet' { ********************************************/ /** Fired when a layer is added to the selection. */ - on(type: 'pm:selectionadd', fn: PM.SelectionEventHandler): this; - once(type: 'pm:selectionadd', fn: PM.SelectionEventHandler): this; - off(type: 'pm:selectionadd', fn: PM.SelectionEventHandler): this; + on(type: 'geoman:selectionadd', fn: Geoman.SelectionEventHandler): this; + once(type: 'geoman:selectionadd', fn: Geoman.SelectionEventHandler): this; + off(type: 'geoman:selectionadd', fn: Geoman.SelectionEventHandler): this; /** Fired when a layer is removed from the selection. */ - on(type: 'pm:selectionremove', fn: PM.SelectionEventHandler): this; - once(type: 'pm:selectionremove', fn: PM.SelectionEventHandler): this; - off(type: 'pm:selectionremove', fn: PM.SelectionEventHandler): this; + on(type: 'geoman:selectionremove', fn: Geoman.SelectionEventHandler): this; + once(type: 'geoman:selectionremove', fn: Geoman.SelectionEventHandler): this; + off(type: 'geoman:selectionremove', fn: Geoman.SelectionEventHandler): this; /****************************************** * @@ -586,30 +586,30 @@ declare module 'leaflet' { /** Fired when SendToBack Mode is toggled. */ on( - type: 'pm:globalbringtobackmodetoggled', - fn: PM.GlobalSendToBackModeToggledEventHandler + type: 'geoman:globalbringtobackmodetoggled', + fn: Geoman.GlobalSendToBackModeToggledEventHandler ): this; once( - type: 'pm:globalbringtobackmodetoggled', - fn: PM.GlobalSendToBackModeToggledEventHandler + type: 'geoman:globalbringtobackmodetoggled', + fn: Geoman.GlobalSendToBackModeToggledEventHandler ): this; off( - type: 'pm:globalbringtobackmodetoggled', - fn?: PM.GlobalSendToBackModeToggledEventHandler + type: 'geoman:globalbringtobackmodetoggled', + fn?: Geoman.GlobalSendToBackModeToggledEventHandler ): this; /** Fired when BringToFront Mode is toggled. */ on( - type: 'pm:globalbringtofrontmodetoggled', - fn: PM.GlobalBringToFrontModeToggledEventHandler + type: 'geoman:globalbringtofrontmodetoggled', + fn: Geoman.GlobalBringToFrontModeToggledEventHandler ): this; once( - type: 'pm:globalbringtofrontmodetoggled', - fn: PM.GlobalBringToFrontModeToggledEventHandler + type: 'geoman:globalbringtofrontmodetoggled', + fn: Geoman.GlobalBringToFrontModeToggledEventHandler ): this; off( - type: 'pm:globalbringtofrontmodetoggled', - fn?: PM.GlobalBringToFrontModeToggledEventHandler + type: 'geoman:globalbringtofrontmodetoggled', + fn?: Geoman.GlobalBringToFrontModeToggledEventHandler ): this; /****************************************** @@ -620,22 +620,22 @@ declare module 'leaflet' { /** Fired when CopyLayer Mode is toggled. */ on( - type: 'pm:globalcopylayermodetoggled', - fn: PM.GlobalCopyLayerModeToggledEventHandler + type: 'geoman:globalcopylayermodetoggled', + fn: Geoman.GlobalCopyLayerModeToggledEventHandler ): this; once( - type: 'pm:globalcopylayermodetoggled', - fn: PM.GlobalCopyLayerModeToggledEventHandler + type: 'geoman:globalcopylayermodetoggled', + fn: Geoman.GlobalCopyLayerModeToggledEventHandler ): this; off( - type: 'pm:globalcopylayermodetoggled', - fn?: PM.GlobalCopyLayerModeToggledEventHandler + type: 'geoman:globalcopylayermodetoggled', + fn?: Geoman.GlobalCopyLayerModeToggledEventHandler ): this; /** Fired when CopyLayer is executed. */ - on(type: 'pm:copylayer', fn: PM.CopyLayerEventHandler): this; - once(type: 'pm:copylayer', fn: PM.CopyLayerEventHandler): this; - off(type: 'pm:copylayer', fn?: PM.CopyLayerEventHandler): this; + on(type: 'geoman:copylayer', fn: Geoman.CopyLayerEventHandler): this; + once(type: 'geoman:copylayer', fn: Geoman.CopyLayerEventHandler): this; + off(type: 'geoman:copylayer', fn?: Geoman.CopyLayerEventHandler): this; /****************************************** * @@ -645,16 +645,16 @@ declare module 'leaflet' { /** Fired when CopyLayer Mode is toggled. */ on( - type: 'pm:globallinesimplificationmodetoggled', - fn: PM.GlobalLineSimplificationModeToggledEventHandler + type: 'geoman:globallinesimplificationmodetoggled', + fn: Geoman.GlobalLineSimplificationModeToggledEventHandler ): this; once( - type: 'pm:globallinesimplificationmodetoggled', - fn: PM.GlobalLineSimplificationModeToggledEventHandler + type: 'geoman:globallinesimplificationmodetoggled', + fn: Geoman.GlobalLineSimplificationModeToggledEventHandler ): this; off( - type: 'pm:globallinesimplificationmodetoggled', - fn?: PM.GlobalLineSimplificationModeToggledEventHandler + type: 'geoman:globallinesimplificationmodetoggled', + fn?: Geoman.GlobalLineSimplificationModeToggledEventHandler ): this; /****************************************** @@ -665,22 +665,22 @@ declare module 'leaflet' { /** Fired when Lasso Mode is toggled. */ on( - type: 'pm:globallassomodetoggled', - fn: PM.GlobalLassoModeToggledEventHandler + type: 'geoman:globallassomodetoggled', + fn: Geoman.GlobalLassoModeToggledEventHandler ): this; once( - type: 'pm:globallassomodetoggled', - fn: PM.GlobalLassoModeToggledEventHandler + type: 'geoman:globallassomodetoggled', + fn: Geoman.GlobalLassoModeToggledEventHandler ): this; off( - type: 'pm:globallassomodetoggled', - fn?: PM.GlobalLassoModeToggledEventHandler + type: 'geoman:globallassomodetoggled', + fn?: Geoman.GlobalLassoModeToggledEventHandler ): this; /** Fired when the Lasso has been drawn. */ - on(type: 'pm:lasso-select', fn: PM.LassoSelectEventHandler): this; - once(type: 'pm:lasso-select', fn: PM.LassoSelectEventHandler): this; - off(type: 'pm:lasso-select', fn?: PM.LassoSelectEventHandler): this; + on(type: 'geoman:lasso-select', fn: Geoman.LassoSelectEventHandler): this; + once(type: 'geoman:lasso-select', fn: Geoman.LassoSelectEventHandler): this; + off(type: 'geoman:lasso-select', fn?: Geoman.LassoSelectEventHandler): this; /****************************************** * @@ -689,9 +689,9 @@ declare module 'leaflet' { ********************************************/ /** Standard Leaflet event. Fired when any layer is removed. */ - on(type: 'pm:langchange', fn: PM.LangChangeEventHandler): this; - once(type: 'pm:langchange', fn: PM.LangChangeEventHandler): this; - off(type: 'pm:langchange', fn?: PM.LangChangeEventHandler): this; + on(type: 'geoman:langchange', fn: Geoman.LangChangeEventHandler): this; + once(type: 'geoman:langchange', fn: Geoman.LangChangeEventHandler): this; + off(type: 'geoman:langchange', fn?: Geoman.LangChangeEventHandler): this; /****************************************** * @@ -700,14 +700,14 @@ declare module 'leaflet' { ********************************************/ /** Fired when a Toolbar button is clicked. */ - on(type: 'pm:buttonclick', fn: PM.ButtonClickEventHandler): this; - once(type: 'pm:buttonclick', fn: PM.ButtonClickEventHandler): this; - off(type: 'pm:buttonclick', fn?: PM.ButtonClickEventHandler): this; + on(type: 'geoman:buttonclick', fn: Geoman.ButtonClickEventHandler): this; + once(type: 'geoman:buttonclick', fn: Geoman.ButtonClickEventHandler): this; + off(type: 'geoman:buttonclick', fn?: Geoman.ButtonClickEventHandler): this; /** Fired when a Toolbar action is clicked. */ - on(type: 'pm:actionclick', fn: PM.ActionClickEventHandler): this; - once(type: 'pm:actionclick', fn: PM.ActionClickEventHandler): this; - off(type: 'pm:actionclick', fn?: PM.ActionClickEventHandler): this; + on(type: 'geoman:actionclick', fn: Geoman.ActionClickEventHandler): this; + once(type: 'geoman:actionclick', fn: Geoman.ActionClickEventHandler): this; + off(type: 'geoman:actionclick', fn?: Geoman.ActionClickEventHandler): this; /****************************************** * @@ -716,9 +716,9 @@ declare module 'leaflet' { ********************************************/ /** Fired when `keydown` or `keyup` on the document is fired. */ - on(type: 'pm:keyevent', fn: PM.KeyboardKeyEventHandler): this; - once(type: 'pm:keyevent', fn: PM.KeyboardKeyEventHandler): this; - off(type: 'pm:keyevent', fn?: PM.KeyboardKeyEventHandler): this; + on(type: 'geoman:keyevent', fn: Geoman.KeyboardKeyEventHandler): this; + once(type: 'geoman:keyevent', fn: Geoman.KeyboardKeyEventHandler): this; + off(type: 'geoman:keyevent', fn?: Geoman.KeyboardKeyEventHandler): this; /****************************************** * @@ -728,16 +728,16 @@ declare module 'leaflet' { /** Fired when global options are changed. */ on( - type: 'pm:globaloptionschanged', - fn: PM.GlobalOptionsChangedEventHandler + type: 'geoman:globaloptionschanged', + fn: Geoman.GlobalOptionsChangedEventHandler ): this; once( - type: 'pm:globaloptionschanged', - fn: PM.GlobalOptionsChangedEventHandler + type: 'geoman:globaloptionschanged', + fn: Geoman.GlobalOptionsChangedEventHandler ): this; off( - type: 'pm:globaloptionschanged', - fn?: PM.GlobalOptionsChangedEventHandler + type: 'geoman:globaloptionschanged', + fn?: Geoman.GlobalOptionsChangedEventHandler ): this; /****************************************** @@ -747,28 +747,28 @@ declare module 'leaflet' { ********************************************/ /** Fired when auto tracing is started and connected with a layer. ⭐ */ - on(type: 'pm:autotracestart', fn: PM.AutoTraceEventHandler): this; - once(type: 'pm:autotracestart', fn: PM.AutoTraceEventHandler): this; - off(type: 'pm:autotracestart', fn?: PM.AutoTraceEventHandler): this; + on(type: 'geoman:autotracestart', fn: Geoman.AutoTraceEventHandler): this; + once(type: 'geoman:autotracestart', fn: Geoman.AutoTraceEventHandler): this; + off(type: 'geoman:autotracestart', fn?: Geoman.AutoTraceEventHandler): this; /** Fired when auto tracing hintline is changed. ⭐ */ on( - type: 'pm:autotracelinechange', - fn: PM.AutoTraceLineChangeEventHandler + type: 'geoman:autotracelinechange', + fn: Geoman.AutoTraceLineChangeEventHandler ): this; once( - type: 'pm:autotracelinechange', - fn: PM.AutoTraceLineChangeEventHandler + type: 'geoman:autotracelinechange', + fn: Geoman.AutoTraceLineChangeEventHandler ): this; off( - type: 'pm:autotracelinechange', - fn?: PM.AutoTraceLineChangeEventHandler + type: 'geoman:autotracelinechange', + fn?: Geoman.AutoTraceLineChangeEventHandler ): this; /** Fired when auto tracing is ended. ⭐ */ - on(type: 'pm:autotraceend', fn: PM.AutoTraceEventHandler): this; - once(type: 'pm:autotraceend', fn: PM.AutoTraceEventHandler): this; - off(type: 'pm:autotraceend', fn?: PM.AutoTraceEventHandler): this; + on(type: 'geoman:autotraceend', fn: Geoman.AutoTraceEventHandler): this; + once(type: 'geoman:autotraceend', fn: Geoman.AutoTraceEventHandler): this; + off(type: 'geoman:autotraceend', fn?: Geoman.AutoTraceEventHandler): this; /****************************************** * @@ -778,16 +778,16 @@ declare module 'leaflet' { /** Fired when a layer is split via Split Mode. */ on( - type: 'pm:globalsplitmodetoggled', - fn: PM.GlobalSplitModeToggledEventHandler + type: 'geoman:globalsplitmodetoggled', + fn: Geoman.GlobalSplitModeToggledEventHandler ): this; once( - type: 'pm:globalsplitmodetoggled', - fn: PM.GlobalSplitModeToggledEventHandler + type: 'geoman:globalsplitmodetoggled', + fn: Geoman.GlobalSplitModeToggledEventHandler ): this; off( - type: 'pm:globalsplitmodetoggled', - fn?: PM.GlobalSplitModeToggledEventHandler + type: 'geoman:globalsplitmodetoggled', + fn?: Geoman.GlobalSplitModeToggledEventHandler ): this; /****************************************** @@ -798,16 +798,16 @@ declare module 'leaflet' { /** Fired when Scale Mode is toggled. */ on( - type: 'pm:globalscalemodetoggled', - fn: PM.GlobalScaleModeToggledEventHandler + type: 'geoman:globalscalemodetoggled', + fn: Geoman.GlobalScaleModeToggledEventHandler ): this; once( - type: 'pm:globalscalemodetoggled', - fn: PM.GlobalScaleModeToggledEventHandler + type: 'geoman:globalscalemodetoggled', + fn: Geoman.GlobalScaleModeToggledEventHandler ): this; off( - type: 'pm:globalscalemodetoggled', - fn?: PM.GlobalScaleModeToggledEventHandler + type: 'geoman:globalscalemodetoggled', + fn?: Geoman.GlobalScaleModeToggledEventHandler ): this; /****************************************** @@ -817,9 +817,9 @@ declare module 'leaflet' { ********************************************/ /** Fired when cancel of Mode is called. */ - on(type: 'pm:globalcancel', fn: PM.GlobalCancelEventHandler): this; - once(type: 'pm:globalcancel', fn: PM.GlobalCancelEventHandler): this; - off(type: 'pm:globalcancel', fn?: PM.GlobalCancelEventHandler): this; + on(type: 'geoman:globalcancel', fn: Geoman.GlobalCancelEventHandler): this; + once(type: 'geoman:globalcancel', fn: Geoman.GlobalCancelEventHandler): this; + off(type: 'geoman:globalcancel', fn?: Geoman.GlobalCancelEventHandler): this; /****************************************** * @@ -828,12 +828,12 @@ declare module 'leaflet' { ********************************************/ /** Fired when an error is thrown. */ - on(type: 'pm:error', fn: PM.ErrorEventHandler): this; - once(type: 'pm:error', fn: PM.ErrorEventHandler): this; - off(type: 'pm:error', fn?: PM.ErrorEventHandler): this; + on(type: 'geoman:error', fn: Geoman.ErrorEventHandler): this; + once(type: 'geoman:error', fn: Geoman.ErrorEventHandler): this; + off(type: 'geoman:error', fn?: Geoman.ErrorEventHandler): this; } - namespace PM { + namespace Geoman { export const version: string; /** Supported shape names. 'ImageOverlay' is in Edit Mode only. Also accepts custom shape name. */ @@ -884,36 +884,36 @@ declare module 'leaflet' { /** * Changes default registration of leaflet-geoman on leaflet layers. * - * @param optIn - if true, a layers pmIgnore property has to be set to false to get initiated. + * @param optIn - if true, a layers geomanIgnore property has to be set to false to get initiated. */ function setOptIn(optIn: boolean): void; /** * Enable leaflet-geoman on an ignored layer. * - * @param layer - re-reads layer.options.pmIgnore to initialize leaflet-geoman. + * @param layer - re-reads layer.options.geomanIgnore to initialize leaflet-geoman. */ function reInitLayer(layer: L.Layer): void; /** - * PM map interface. + * Geoman map interface. */ - interface PMMap - extends PMDrawMap, - PMEditMap, - PMDragMap, - PMRemoveMap, - PMCutMap, - PMRotateMap, - PMScaleMap, - PMSelectionMap, - PMUnionMap, - PMLineSimplificationMap, - PMDifferenceMap, - PMLassoMap { - Toolbar: PMMapToolbar; - - Keyboard: PMMapKeyboard; + interface GeomanMap + extends GeomanDrawMap, + GeomanEditMap, + GeomanDragMap, + GeomanRemoveMap, + GeomanCutMap, + GeomanRotateMap, + GeomanScaleMap, + GeomanSelectionMap, + GeomanUnionMap, + GeomanLineSimplificationMap, + GeomanDifferenceMap, + GeomanLassoMap { + Toolbar: GeomanMapToolbar; + + Keyboard: GeomanMapKeyboard; /** Adds the Toolbar to the map. */ addControls(options?: ToolbarOptions): void; @@ -1050,7 +1050,7 @@ declare module 'leaflet' { | 'drawCustomShape' | string; - interface PMMapToolbar { + interface GeomanMapToolbar { /** Pass an array of button names to reorder the buttons in the Toolbar. */ changeControlOrder(order?: TOOLBAR_CONTROL_ORDER[]): void; @@ -1105,7 +1105,7 @@ declare module 'leaflet' { type KEYBOARD_EVENT_TYPE = 'current' | 'keydown' | 'keyup'; - interface PMMapKeyboard { + interface GeomanMapKeyboard { /** Pass an array of button names to reorder the buttons in the Toolbar. */ getLastKeyEvent(type: KEYBOARD_EVENT_TYPE[]): KeyboardKeyEventHandler; @@ -1141,7 +1141,7 @@ declare module 'leaflet' { /** Control can be toggled. */ doToggle?: boolean; - /** Extending Class f. ex. Polyline, Polygon, ... L.PM.Draw.EXTENDINGCLASS */ + /** Extending Class f. ex. Polyline, Polygon, ... L.Geoman.Draw.EXTENDINGCLASS */ jsClass?: string; /** Function fired when clicking the control. */ @@ -1245,7 +1245,7 @@ declare module 'leaflet' { cutAsCircle?: boolean; } - interface PMDrawMap { + interface GeomanDrawMap { /** Enable Draw Mode with the passed shape. */ enableDraw(shape: SUPPORTED_SHAPES, options?: DrawModeOptions): void; @@ -1314,7 +1314,7 @@ declare module 'leaflet' { removeCustomShapeFromToolbar(name: string): void; } - interface PMEditMap { + interface GeomanEditMap { /** Enables edit mode. The passed options are preserved, even when the mode is enabled via the Toolbar */ enableGlobalEditMode(options?: EditModeOptions): void; @@ -1328,7 +1328,7 @@ declare module 'leaflet' { globalEditModeEnabled(): boolean; } - interface PMDragMap { + interface GeomanDragMap { /** Enables global drag mode. */ enableGlobalDragMode(): void; @@ -1345,7 +1345,7 @@ declare module 'leaflet' { cancelGlobalDragMode(): void; } - interface PMRemoveMap { + interface GeomanRemoveMap { /** Enables global removal mode. */ enableGlobalRemovalMode(): void; @@ -1362,7 +1362,7 @@ declare module 'leaflet' { cancelGlobalRemovalMode(): void; } - interface PMCutMap { + interface GeomanCutMap { /** Enables global cut mode. */ enableGlobalCutMode(options?: CutModeOptions): void; @@ -1376,7 +1376,7 @@ declare module 'leaflet' { globalCutModeEnabled(): boolean; } - interface PMRotateMap { + interface GeomanRotateMap { /** Enables global rotate mode. */ enableGlobalRotateMode(): void; @@ -1393,7 +1393,7 @@ declare module 'leaflet' { cancelGlobalRotateMode(): void; } - interface PMScaleMap { + interface GeomanScaleMap { /** Enables global scale mode. ⭐ */ enableGlobalScaleMode(): void; @@ -1410,7 +1410,7 @@ declare module 'leaflet' { cancelGlobalScaleMode(): void; } - interface PMSelectionMap { + interface GeomanSelectionMap { /** Enables global selection mode. Optional a filter can be added, which checks if the selection is allowed. ⭐ */ enableSelectionTool(filterFnc?: () => boolean): void; @@ -1433,7 +1433,7 @@ declare module 'leaflet' { isLayerSelected(layer: L.Layer): boolean; } - interface PMUnionMap { + interface GeomanUnionMap { /** Enables global union mode. ⭐ */ enableGlobalUnionMode(): void; @@ -1450,7 +1450,7 @@ declare module 'leaflet' { union(layer1: L.Layer, layer2: L.Layer): void; } - interface PMDifferenceMap { + interface GeomanDifferenceMap { /** Enables global difference mode. ⭐ */ enableGlobalDifferenceMode(): void; @@ -1467,7 +1467,7 @@ declare module 'leaflet' { difference(layer1: L.Layer, layer2: L.Layer): void; } - interface PMCopyLayerMap { + interface GeomanCopyLayerMap { /** Enables global CopyLayer mode. ⭐ */ enableGlobalCopyLayerMode(): void; @@ -1484,7 +1484,7 @@ declare module 'leaflet' { resetCopyLayerMode(): void; } - interface PMLineSimplificationMap { + interface GeomanLineSimplificationMap { /** Enables global LineSimplification mode. ⭐ */ enableGlobalLineSimplificationMode(): void; @@ -1501,7 +1501,7 @@ declare module 'leaflet' { cancelGlobalLineSimplificationMode(): void; } - interface PMLassoMap { + interface GeomanLassoMap { /** Enables global Lasso mode. ⭐ */ enableGlobalLassoMode(options?: LassoModeOptions): void; @@ -1536,7 +1536,7 @@ declare module 'leaflet' { getLassoSelectMode(): LASSO_SELECT_MODES; } - interface PMRotateLayer { + interface GeomanRotateLayer { /** Enables rotate mode on the layer. */ enableRotate(): void; @@ -1565,7 +1565,7 @@ declare module 'leaflet' { setRotationCenter(center: L.LatLng | null): void; } - interface PMScaleLayer { + interface GeomanScaleLayer { /** Enables Scale mode on the layer. ⭐ */ enableScale(): void; @@ -1579,7 +1579,7 @@ declare module 'leaflet' { scaleLayer(percent: number | { w: number; h: number }): void; } - interface PMSplitMap { + interface GeomanSplitMap { /** Enables global split mode. ⭐ */ enableGlobalSplitMode(options?: SplitModeOptions): void; @@ -1592,7 +1592,7 @@ declare module 'leaflet' { /** Returns true if global split mode is enabled. false when disabled. ⭐ */ globalSplitModeEnabled(): boolean; } - interface PMBringToFrontMap { + interface GeomanBringToFrontMap { /** Enables global BringToFront mode. ⭐ */ enableGlobalBringToFrontMode(): void; @@ -1605,7 +1605,7 @@ declare module 'leaflet' { /** Returns true if global BringToFront mode is enabled. false when disabled. ⭐ */ globalBringToFrontModeEnabled(): boolean; } - interface PMSendToBackMap { + interface GeomanSendToBackMap { /** Enables global SendToBack mode. ⭐ */ enableGlobalSendToBackMode(): void; @@ -1630,7 +1630,7 @@ declare module 'leaflet' { } interface DrawShape { - /** Applies the styles (templineStyle, hintlineStyle, pathOptions, markerStyle) to the drawing layer. map.pm.Draw.Polyline.setStyle(options). */ + /** Applies the styles (templineStyle, hintlineStyle, pathOptions, markerStyle) to the drawing layer. map.geoman.Draw.Polyline.setStyle(options). */ setStyle(options: L.PathOptions | L.CircleMarkerOptions): void; /** Set path options */ @@ -1721,7 +1721,7 @@ declare module 'leaflet' { /** Defines which layers should dragged with this layer together. true syncs all layers in the same LayerGroup(s) or you pass an `Array` of layers to sync. (default:false). */ syncLayersOnDrag?: L.Layer[] | boolean; - /** Edit-Mode for the layer can disabled (`pm.enable()`). (default:true). */ + /** Edit-Mode for the layer can disabled (`geoman.enable()`). (default:true). */ allowEditing?: boolean; /** Removing can be disabled for the layer. (default:true). */ @@ -1960,7 +1960,7 @@ declare module 'leaflet' { type CancelActionModes = 'editMode' | 'dragMode' | 'removalMode' | 'rotateMode' | 'scaleMode' | 'lineSimplificationMode'; /** - * PM toolbar options. + * Geoman toolbar options. */ interface ToolbarOptions { /** Toolbar position. */ @@ -2091,7 +2091,7 @@ declare module 'leaflet' { options?: L.ControlPosition; } - interface PMEditLayer extends PMEditTextLayer { + interface GeomanEditLayer extends GeomanEditTextLayer { /** Enables edit mode. The passed options are preserved, even when the mode is enabled via the Toolbar */ enable(options?: EditModeOptions): void; @@ -2120,7 +2120,7 @@ declare module 'leaflet' { cancel(): void; } - interface PMEditTextLayer { + interface GeomanEditTextLayer { /** Activate text editing of Text-Layer. */ focus(): void; @@ -2140,7 +2140,7 @@ declare module 'leaflet' { getText(): string; } - interface PMDragLayer { + interface GeomanDragLayer { /** Enables dragging for the layer. */ enableLayerDrag(): void; @@ -2154,22 +2154,22 @@ declare module 'leaflet' { layerDragEnabled(): boolean; } - interface PMMeasurementLayer { + interface GeomanMeasurementLayer { /** Contains the measurements of the last calculation. ⭐ */ measurements: MeasurementData; } - interface PMLayer - extends PMRotateLayer, - PMEditLayer, - PMDragLayer, - PMMeasurementLayer, - PMScaleLayer { + interface GeomanLayer + extends GeomanRotateLayer, + GeomanEditLayer, + GeomanDragLayer, + GeomanMeasurementLayer, + GeomanScaleLayer { /** Get shape of the layer. */ getShape(): SUPPORTED_SHAPES; } - interface PMLayerGroup { + interface GeomanLayerGroup { /** Enables edit mode for all child layers. The passed options are preserved, even when the mode is enabled via the Toolbar */ enable(options?: EditModeOptions): void; @@ -2264,18 +2264,18 @@ declare module 'leaflet' { export type GlobalDrawModeToggledEventHandler = (event: { enabled: boolean; - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; map: L.Map; }) => void; export type DrawStartEventHandler = (e: { - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; workingLayer: L.Layer; }) => void; export type DrawEndEventHandler = (e: { - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; }) => void; export type CreateEventHandler = (e: { - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; layer: L.Layer; }) => void; @@ -2284,13 +2284,13 @@ declare module 'leaflet' { */ export type VertexAddedEventHandler = (e: { - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; workingLayer: L.Layer; marker: L.Marker; latlng: L.LatLng; }) => void; export type SnapEventHandler = (e: { - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; distance: number; layer: L.Layer; workingLayer: L.Layer; @@ -2300,7 +2300,7 @@ declare module 'leaflet' { snapLatLng: L.LatLng; }) => void; export type CenterPlacedEventHandler = (e: { - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; workingLayer: L.Layer; latlng: L.LatLng; }) => void; @@ -2310,19 +2310,19 @@ declare module 'leaflet' { */ export type EditEventHandler = (e: { - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; layer: L.Layer; }) => void; export type UpdateEventHandler = (e: { - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; layer: L.Layer; }) => void; export type EnableEventHandler = (e: { - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; layer: L.Layer; }) => void; export type DisableEventHandler = (e: { - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; layer: L.Layer; }) => void; export type VertexAddedEventHandler2 = (e: { @@ -2330,66 +2330,66 @@ declare module 'leaflet' { indexPath: number; latlng: L.LatLng; marker: L.Marker; - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; }) => void; export type VertexRemovedEventHandler = (e: { layer: L.Layer; indexPath: number; marker: L.Marker; - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; }) => void; export type VertexClickEventHandler = (e: { layer: L.Layer; indexPath: number; markerEvent: any; - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; }) => void; export type VertexDragStartEventHandler = (e: { layer: L.Layer; indexPath: number; markerEvent: any; - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; }) => void; export type VertexDragEventHandler = (e: { layer: L.Layer; indexPath: number; markerEvent: any; - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; }) => void; export type VertexDragEndEventHandler = (e: { layer: L.Layer; indexPath: number; markerEvent: any; - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; intersectionReset: boolean; }) => void; export type LayerResetEventHandler = (e: { layer: L.Layer; indexPath: number; markerEvent: any; - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; }) => void; export type IntersectEventHandler = (e: { - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; layer: L.Layer; intersection: L.LatLng; }) => void; export type ChangeEventHandler = (e: { - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; layer: L.Layer; latlngs: L.LatLng | L.LatLng[]; }) => void; export type TextChangeEventHandler = (e: { - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; layer: L.Layer; text: string; }) => void; export type TextFocusEventHandler = (e: { - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; layer: L.Layer; }) => void; export type TextBlurEventHandler = (e: { - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; layer: L.Layer; }) => void; export type ContainmentViolationEventHandler = (e: { @@ -2422,7 +2422,7 @@ declare module 'leaflet' { */ export type DragStartEventHandler = (e: { layer: L.Layer; - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; }) => void; export type DragEventHandler = (e: { layer: L.Layer; @@ -2430,19 +2430,19 @@ declare module 'leaflet' { latlng: L.LatLng; layerPoint: L.Point; originalEvent: any; - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; }) => void; export type DragEndEventHandler = (e: { layer: L.Layer; - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; }) => void; export type DragEnableEventHandler = (e: { layer: L.Layer; - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; }) => void; export type DragDisableEventHandler = (e: { layer: L.Layer; - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; }) => void; /** @@ -2451,7 +2451,7 @@ declare module 'leaflet' { export type RemoveEventHandler = (e: { layer: L.Layer; - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; }) => void; /** @@ -2472,7 +2472,7 @@ declare module 'leaflet' { export type CutEventHandler = (e: { layer: L.Layer; originalLayer: L.Layer; - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; }) => void; /** @@ -2481,11 +2481,11 @@ declare module 'leaflet' { export type RotateEnableEventHandler = (e: { layer: L.Layer; helpLayer: L.Layer; - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; }) => void; export type RotateDisableEventHandler = (e: { layer: L.Layer; - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; }) => void; export type RotateStartEventHandler = (e: { layer: L.Layer; @@ -2620,7 +2620,7 @@ declare module 'leaflet' { activeLang: string; oldLang: string; fallback: string; - translations: PM.Translations; + translations: Geoman.Translations; }) => void; /** @@ -2628,13 +2628,13 @@ declare module 'leaflet' { */ export type ButtonClickEventHandler = (e: { btnName: string; - button: PM.Button; + button: Geoman.Button; }) => void; export type ActionClickEventHandler = (e: { text: string; action: string; btnName: string; - button: PM.Button; + button: Geoman.Button; }) => void; /** @@ -2670,7 +2670,7 @@ declare module 'leaflet' { layers: L.Layer[]; originalLayer: L.Layer; splitLayer: L.Layer; - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; }) => void; /** @@ -2679,11 +2679,11 @@ declare module 'leaflet' { export type ScaleEnableEventHandler = (e: { layer: L.Layer; helpLayer: L.Layer; - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; }) => void; export type ScaleDisableEventHandler = (e: { layer: L.Layer; - shape: PM.SUPPORTED_SHAPES; + shape: Geoman.SUPPORTED_SHAPES; }) => void; export type ScaleStartEventHandler = (e: { layer: L.Layer; diff --git a/src/js/Draw/L.PM.Draw.Circle.js b/src/js/Draw/Draw.Circle.js similarity index 92% rename from src/js/Draw/L.PM.Draw.Circle.js rename to src/js/Draw/Draw.Circle.js index 129aea56..95992730 100644 --- a/src/js/Draw/L.PM.Draw.Circle.js +++ b/src/js/Draw/Draw.Circle.js @@ -1,5 +1,5 @@ import { Circle } from 'leaflet'; -import GeomanDrawCircleMarker from './L.PM.Draw.CircleMarker'; +import GeomanDrawCircleMarker from './Draw.CircleMarker'; export default class GeomanDrawCircle extends GeomanDrawCircleMarker { initialize(map) { diff --git a/src/js/Draw/L.PM.Draw.CircleMarker.js b/src/js/Draw/Draw.CircleMarker.js similarity index 93% rename from src/js/Draw/L.PM.Draw.CircleMarker.js rename to src/js/Draw/Draw.CircleMarker.js index f480cdcd..6840e9fb 100644 --- a/src/js/Draw/L.PM.Draw.CircleMarker.js +++ b/src/js/Draw/Draw.CircleMarker.js @@ -9,8 +9,8 @@ import { Util, } from 'leaflet'; import { destinationOnLine, getTranslation } from '../helpers'; -import Draw from './L.PM.Draw'; -import Utils from '../L.PM.Utils'; +import Draw from './Draw'; +import Utils from '../GeomanUtils'; export default class GeomanDrawCircleMarker extends Draw { initialize(map) { @@ -28,14 +28,14 @@ export default class GeomanDrawCircleMarker extends Draw { enable(options) { // TODO: Think about if these options could be passed globally for all - // instances of L.PM.Draw. So a dev could set drawing style one time as some kind of config + // instances of Geoman.Draw. So a dev could set drawing style one time as some kind of config Util.setOptions(this, options); // change enabled state this._enabled = true; // toggle the draw button of the Toolbar in case drawing mode got enabled without the button - this._map.pm.Toolbar.toggleButton(this.toolbarButtonName, true); + this._map.geoman.Toolbar.toggleButton(this.toolbarButtonName, true); // change map cursor this._map.getContainer().classList.add('leaflet-geoman-draw-cursor'); @@ -49,7 +49,7 @@ export default class GeomanDrawCircleMarker extends Draw { // create a new layergroup this._layerGroup = new FeatureGroup(); - this._layerGroup._pmTempLayer = true; + this._layerGroup._geomanTempLayer = true; this._layerGroup.addTo(this._map); // this is the circle we want to draw @@ -58,7 +58,7 @@ export default class GeomanDrawCircleMarker extends Draw { templineStyle ); this._setPane(this._layer, 'layerPane'); - this._layer._pmTempLayer = true; + this._layer._geomanTempLayer = true; // this is the marker in the center of the circle this._centerMarker = new Marker(this._map.getCenter(), { @@ -67,7 +67,7 @@ export default class GeomanDrawCircleMarker extends Draw { zIndexOffset: 100, }); this._setPane(this._centerMarker, 'vertexPane'); - this._centerMarker._pmTempLayer = true; + this._centerMarker._geomanTempLayer = true; // this is the hintmarker on the pointer cursor this._hintMarker = new Marker(this._map.getCenter(), { @@ -77,7 +77,7 @@ export default class GeomanDrawCircleMarker extends Draw { }), }); this._setPane(this._hintMarker, 'vertexPane'); - this._hintMarker._pmTempLayer = true; + this._hintMarker._geomanTempLayer = true; this._layerGroup.addLayer(this._hintMarker); // show the hintmarker if the option is set @@ -101,7 +101,7 @@ export default class GeomanDrawCircleMarker extends Draw { // this is the hintline from the hint marker to the center marker this._hintline = new Polyline([], this.options.hintlineStyle); this._setPane(this._hintline, 'layerPane'); - this._hintline._pmTempLayer = true; + this._hintline._geomanTempLayer = true; this._layerGroup.addLayer(this._hintline); // create a polygon-point on click this._map.on('click', this._placeCenterMarker, this); @@ -115,7 +115,7 @@ export default class GeomanDrawCircleMarker extends Draw { ...this.options.templineStyle, }); this._setPane(this._hintMarker, 'layerPane'); - this._hintMarker._pmTempLayer = true; + this._hintMarker._geomanTempLayer = true; this._hintMarker.addTo(this._map); // this is just to keep the snappable mixin happy this._layer = this._hintMarker; @@ -153,7 +153,7 @@ export default class GeomanDrawCircleMarker extends Draw { // enable edit mode for existing markers this._map.eachLayer((layer) => { if (this.isRelevantMarker(layer)) { - layer.pm.enable(); + layer.geoman.enable(); } }); } @@ -195,7 +195,7 @@ export default class GeomanDrawCircleMarker extends Draw { this._map.off('pointermove', this._syncHintMarker, this); // toggle the draw button of the Toolbar in case drawing mode got disabled without the button - this._map.pm.Toolbar.toggleButton(this.toolbarButtonName, false); + this._map.geoman.Toolbar.toggleButton(this.toolbarButtonName, false); // cleanup snapping if (this.options.snappable) { @@ -211,7 +211,7 @@ export default class GeomanDrawCircleMarker extends Draw { // disable dragging and removing for all markers this._map.eachLayer((layer) => { if (this.isRelevantMarker(layer)) { - layer.pm.disable(); + layer.geoman.disable(); } }); } @@ -322,8 +322,8 @@ export default class GeomanDrawCircleMarker extends Draw { return ( layer instanceof CircleMarker && !(layer instanceof Circle) && - layer.pm && - !layer._pmTempLayer + layer.geoman && + !layer._geomanTempLayer ); } @@ -359,11 +359,11 @@ export default class GeomanDrawCircleMarker extends Draw { this._setPane(marker, 'layerPane'); this._finishLayer(marker); // add marker to the map - marker.addTo(this._map.pm._getContainingLayer()); + marker.addTo(this._map.geoman._getContainingLayer()); this._extendingCreateMarker(marker); - // fire the pm:create event and pass shape and marker + // fire the geoman:create event and pass shape and marker this._fireCreate(marker); this._cleanupSnapping(); @@ -374,9 +374,9 @@ export default class GeomanDrawCircleMarker extends Draw { } _extendingCreateMarker(marker) { - if (marker.pm && this.options.markerEditable) { + if (marker.geoman && this.options.markerEditable) { // enable editing for the marker - marker.pm.enable(); + marker.geoman.enable(); } } @@ -421,14 +421,14 @@ export default class GeomanDrawCircleMarker extends Draw { const circleLayer = new this._BaseCircleClass(center, options); this._setPane(circleLayer, 'layerPane'); this._finishLayer(circleLayer); - circleLayer.addTo(this._map.pm._getContainingLayer()); + circleLayer.addTo(this._map.geoman._getContainingLayer()); - if (circleLayer.pm) { + if (circleLayer.geoman) { // create polygon around the circle border - circleLayer.pm._updateHiddenPolyCircle(); + circleLayer.geoman._updateHiddenPolyCircle(); } - // fire the pm:create event and pass shape and layer + // fire the geoman:create event and pass shape and layer this._fireCreate(circleLayer); const hintMarkerLatLng = this._hintMarker.getLatLng(); diff --git a/src/js/Draw/L.PM.Draw.Cut.js b/src/js/Draw/Draw.Cut.js similarity index 88% rename from src/js/Draw/L.PM.Draw.Cut.js rename to src/js/Draw/Draw.Cut.js index 656f59f3..b10e74ec 100644 --- a/src/js/Draw/L.PM.Draw.Cut.js +++ b/src/js/Draw/Draw.Cut.js @@ -9,10 +9,10 @@ import { groupToMultiLineString, intersect, } from '../helpers/turfHelper'; -import Draw from './L.PM.Draw'; -import Geoman from '../L.PM'; -import Utils from '../L.PM.Utils'; -import GeomanDrawPolygon from './L.PM.Draw.Polygon'; +import Draw from './Draw'; +import Geoman from '../Geoman'; +import Utils from '../GeomanUtils'; +import GeomanDrawPolygon from './Draw.Polygon'; export default class GeomanCut extends GeomanDrawPolygon { initialize(map) { @@ -63,14 +63,14 @@ export default class GeomanCut extends GeomanDrawPolygon { delete this._tempSnapLayerIndex; this._editedLayers.forEach(({ layer, originalLayer }) => { - // fire pm:cut on the cutted layer + // fire geoman:cut on the cutted layer this._fireCut(originalLayer, layer, originalLayer); - // fire pm:cut on the map + // fire geoman:cut on the map this._fireCut(this._map, layer, originalLayer); // fire edit event after cut - originalLayer.pm._fireEdit(); + originalLayer.geoman._fireEdit(); }); this._editedLayers = []; @@ -94,20 +94,20 @@ export default class GeomanCut extends GeomanDrawPolygon { // convert object to array .map((l) => all[l]) // only layers handled by leaflet-geoman - .filter((l) => l.pm) - .filter((l) => !l._pmTempLayer) + .filter((l) => l.geoman) + .filter((l) => !l._geomanTempLayer) // filter out everything that ignore leaflet-geoman .filter( (l) => - (!Geoman.optIn && !l.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) - (Geoman.optIn && l.options.pmIgnore === false) // if optIn is true and pmIgnore is false); + (!Geoman.optIn && !l.options.geomanIgnore) || // if optIn is not set / true and geomanIgnore is not set / true (default) + (Geoman.optIn && l.options.geomanIgnore === false) // if optIn is true and geomanIgnore is false); ) // only polyline instances .filter((l) => l instanceof Polyline) // exclude the drawn one .filter((l) => l !== layer) // layer is allowed to cut - .filter((l) => l.pm.options.allowCutting) + .filter((l) => l.geoman.options.allowCutting) // filter out everything that ignore leaflet-geoman .filter((l) => { // TODO: after cutting nothing else can be cutted anymore until a new list is passed, because the layers don't exists anymore. Should we remove the cutted layers from the list? @@ -188,25 +188,25 @@ export default class GeomanCut extends GeomanDrawPolygon { } this._setPane(resultLayer, 'layerPane'); const resultingLayer = resultLayer.addTo( - this._map.pm._getContainingLayer() + this._map.geoman._getContainingLayer() ); // give the new layer the original options - resultingLayer.pm.enable(l.pm.options); - resultingLayer.pm.disable(); + resultingLayer.geoman.enable(l.geoman.options); + resultingLayer.geoman.disable(); - // add templayer prop so pm:remove isn't fired - l._pmTempLayer = true; - layer._pmTempLayer = true; + // add templayer prop so geoman:remove isn't fired + l._geomanTempLayer = true; + layer._geomanTempLayer = true; // remove old layer and cutting layer l.remove(); - l.removeFrom(this._map.pm._getContainingLayer()); + l.removeFrom(this._map.geoman._getContainingLayer()); layer.remove(); - layer.removeFrom(this._map.pm._getContainingLayer()); + layer.removeFrom(this._map.geoman._getContainingLayer()); // Remove it only if it is a layergroup. It can be only not a layergroup if a layer exists if (resultingLayer.getLayers && resultingLayer.getLayers().length === 0) { - this._map.pm.removeLayer({ target: resultingLayer }); + this._map.geoman.removeLayer({ target: resultingLayer }); } if (resultingLayer instanceof LayerGroup) { diff --git a/src/js/Draw/L.PM.Draw.Marker.js b/src/js/Draw/Draw.Marker.js similarity index 85% rename from src/js/Draw/L.PM.Draw.Marker.js rename to src/js/Draw/Draw.Marker.js index 0d624882..af9925fe 100644 --- a/src/js/Draw/L.PM.Draw.Marker.js +++ b/src/js/Draw/Draw.Marker.js @@ -1,6 +1,6 @@ import { Marker, Point, Util } from 'leaflet'; import { getTranslation } from '../helpers'; -import Draw from './L.PM.Draw'; +import Draw from './Draw'; export default class GeomanDrawMarker extends Draw { initialize(map) { @@ -13,7 +13,7 @@ export default class GeomanDrawMarker extends Draw { enable(options) { // TODO: Think about if these options could be passed globally for all - // instances of L.PM.Draw. So a dev could set drawing style one time as some kind of config + // instances of L.Geoman.Draw. So a dev could set drawing style one time as some kind of config Util.setOptions(this, options); // change enabled state @@ -26,7 +26,7 @@ export default class GeomanDrawMarker extends Draw { this._map.on('click', this._createMarker, this); // toggle the draw button of the Toolbar in case drawing mode got enabled without the button - this._map.pm.Toolbar.toggleButton(this.toolbarButtonName, true); + this._map.geoman.Toolbar.toggleButton(this.toolbarButtonName, true); // this is the hintmarker on the pointer cursor this._hintMarker = new Marker( @@ -34,7 +34,7 @@ export default class GeomanDrawMarker extends Draw { this.options.markerStyle ); this._setPane(this._hintMarker, 'markerPane'); - this._hintMarker._pmTempLayer = true; + this._hintMarker._geomanTempLayer = true; this._hintMarker.addTo(this._map); // add tooltip to hintmarker @@ -60,7 +60,7 @@ export default class GeomanDrawMarker extends Draw { if (this.options.markerEditable) { this._map.eachLayer((layer) => { if (this.isRelevantMarker(layer)) { - layer.pm.enable(); + layer.geoman.enable(); } }); } @@ -94,12 +94,12 @@ export default class GeomanDrawMarker extends Draw { // disable dragging and removing for all markers this._map.eachLayer((layer) => { if (this.isRelevantMarker(layer)) { - layer.pm.disable(); + layer.geoman.disable(); } }); // toggle the draw button of the Toolbar in case drawing mode got disabled without the button - this._map.pm.Toolbar.toggleButton(this.toolbarButtonName, false); + this._map.geoman.Toolbar.toggleButton(this.toolbarButtonName, false); // cleanup snapping if (this.options.snappable) { @@ -126,9 +126,9 @@ export default class GeomanDrawMarker extends Draw { isRelevantMarker(layer) { return ( layer instanceof Marker && - layer.pm && - !layer._pmTempLayer && - !layer.pm._initTextMarker + layer.geoman && + !layer._geomanTempLayer && + !layer.geoman._initTextMarker ); } @@ -174,21 +174,21 @@ export default class GeomanDrawMarker extends Draw { this._setPane(marker, 'markerPane'); this._finishLayer(marker); - if (!marker.pm) { - // if pm is not create we don't apply dragging to the marker (draggable is applied to the marker, when it is added to the map ) + if (!marker.geoman) { + // if geoman is not create we don't apply dragging to the marker (draggable is applied to the marker, when it is added to the map ) marker.options.draggable = false; } // add marker to the map - marker.addTo(this._map.pm._getContainingLayer()); + marker.addTo(this._map.geoman._getContainingLayer()); - if (marker.pm && this.options.markerEditable) { + if (marker.geoman && this.options.markerEditable) { // enable editing for the marker - marker.pm.enable(); + marker.geoman.enable(); } else if (marker.dragging) { marker.dragging.disable(); } - // fire the pm:create event and pass shape and marker + // fire the geoman:create event and pass shape and marker this._fireCreate(marker); this._cleanupSnapping(); diff --git a/src/js/Draw/L.PM.Draw.Polygon.js b/src/js/Draw/Draw.Polygon.js similarity index 92% rename from src/js/Draw/L.PM.Draw.Polygon.js rename to src/js/Draw/Draw.Polygon.js index 158f4362..52039b7b 100644 --- a/src/js/Draw/L.PM.Draw.Polygon.js +++ b/src/js/Draw/Draw.Polygon.js @@ -1,7 +1,7 @@ import { DivIcon, Marker, Polygon } from 'leaflet'; import { getTranslation } from '../helpers'; -import Draw from './L.PM.Draw'; -import GeomanDrawLine from './L.PM.Draw.Polyline'; +import Draw from './Draw'; +import GeomanDrawLine from './Draw.Polyline'; export default class GeomanDrawPolygon extends GeomanDrawLine { initialize(map) { @@ -13,7 +13,7 @@ export default class GeomanDrawPolygon extends GeomanDrawLine { enable(options) { Draw.Polyline.prototype.enable.call(this, options); // Overwrite the shape "Polyline" of this._layer - this._layer.pm._shape = 'Polygon'; + this._layer.geoman._shape = 'Polygon'; } _createMarker(latlng) { @@ -25,7 +25,7 @@ export default class GeomanDrawPolygon extends GeomanDrawLine { this._setPane(marker, 'vertexPane'); // mark this marker as temporary - marker._pmTempLayer = true; + marker._geomanTempLayer = true; // add it to the map this._layerGroup.addLayer(marker); @@ -95,9 +95,9 @@ export default class GeomanDrawPolygon extends GeomanDrawLine { const polygonLayer = new Polygon(coords, this.options.pathOptions); this._setPane(polygonLayer, 'layerPane'); this._finishLayer(polygonLayer); - polygonLayer.addTo(this._map.pm._getContainingLayer()); + polygonLayer.addTo(this._map.geoman._getContainingLayer()); - // fire the pm:create event and pass shape and layer + // fire the geoman:create event and pass shape and layer this._fireCreate(polygonLayer); // clean up snapping states diff --git a/src/js/Draw/L.PM.Draw.Polyline.js b/src/js/Draw/Draw.Polyline.js similarity index 95% rename from src/js/Draw/L.PM.Draw.Polyline.js rename to src/js/Draw/Draw.Polyline.js index 5ca1acbd..3055b900 100644 --- a/src/js/Draw/L.PM.Draw.Polyline.js +++ b/src/js/Draw/Draw.Polyline.js @@ -1,9 +1,9 @@ import kinks from '@turf/kinks'; -import Draw from './L.PM.Draw'; +import Draw from './Draw'; import { DivIcon, FeatureGroup, Marker, Point, Polyline, Util } from 'leaflet'; import { getTranslation } from '../helpers'; -import Utils from '../L.PM.Utils'; +import Utils from '../GeomanUtils'; export default class GeomanDrawPolyline extends Draw { initialize(map) { @@ -23,22 +23,22 @@ export default class GeomanDrawPolyline extends Draw { // create a new layergroup this._layerGroup = new FeatureGroup(); - this._layerGroup._pmTempLayer = true; + this._layerGroup._geomanTempLayer = true; this._layerGroup.addTo(this._map); // this is the polyLine that'll make up the polygon this._layer = new Polyline([], { ...this.options.templineStyle, - pmIgnore: false, + geomanIgnore: false, }); this._setPane(this._layer, 'layerPane'); - this._layer._pmTempLayer = true; + this._layer._geomanTempLayer = true; this._layerGroup.addLayer(this._layer); // this is the hintline from the pointer cursor to the last marker this._hintline = new Polyline([], this.options.hintlineStyle); this._setPane(this._hintline, 'layerPane'); - this._hintline._pmTempLayer = true; + this._hintline._geomanTempLayer = true; this._layerGroup.addLayer(this._hintline); // this is the hintmarker on the pointer cursor @@ -50,7 +50,7 @@ export default class GeomanDrawPolyline extends Draw { }), }); this._setPane(this._hintMarker, 'vertexPane'); - this._hintMarker._pmTempLayer = true; + this._hintMarker._geomanTempLayer = true; this._layerGroup.addLayer(this._hintMarker); // show the hintmarker if the option is set @@ -99,7 +99,7 @@ export default class GeomanDrawPolyline extends Draw { this._hintMarker.on('move', this._syncHintLine, this); // toggle the draw button of the Toolbar in case drawing mode got enabled without the button - this._map.pm.Toolbar.toggleButton(this.toolbarButtonName, true); + this._map.geoman.Toolbar.toggleButton(this.toolbarButtonName, true); // an array used in the snapping mixin. // TODO: think about moving this somewhere else? @@ -141,7 +141,7 @@ export default class GeomanDrawPolyline extends Draw { this._map.removeLayer(this._layerGroup); // toggle the draw button of the Toolbar in case drawing mode got disabled without the button - this._map.pm.Toolbar.toggleButton(this.toolbarButtonName, false); + this._map.geoman.Toolbar.toggleButton(this.toolbarButtonName, false); // cleanup snapping if (this.options.snappable) { @@ -381,9 +381,9 @@ export default class GeomanDrawPolyline extends Draw { const polylineLayer = new Polyline(coords, this.options.pathOptions); this._setPane(polylineLayer, 'layerPane'); this._finishLayer(polylineLayer); - polylineLayer.addTo(this._map.pm._getContainingLayer()); + polylineLayer.addTo(this._map.geoman._getContainingLayer()); - // fire the pm:create event and pass shape and layer + // fire the geoman:create event and pass shape and layer this._fireCreate(polylineLayer); if (this.options.snappable) { @@ -407,7 +407,7 @@ export default class GeomanDrawPolyline extends Draw { icon: new DivIcon({ className: 'leaflet-geoman-vertex-icon' }), }); this._setPane(marker, 'vertexPane'); - marker._pmTempLayer = true; + marker._geomanTempLayer = true; // add it to the map this._layerGroup.addLayer(marker); diff --git a/src/js/Draw/L.PM.Draw.Rectangle.js b/src/js/Draw/Draw.Rectangle.js similarity index 92% rename from src/js/Draw/L.PM.Draw.Rectangle.js rename to src/js/Draw/Draw.Rectangle.js index 15a97a9b..3ac6dae5 100644 --- a/src/js/Draw/L.PM.Draw.Rectangle.js +++ b/src/js/Draw/Draw.Rectangle.js @@ -1,7 +1,7 @@ import { DivIcon, FeatureGroup, Marker, Point, Rectangle, Util } from 'leaflet'; import { fixLatOffset, getTranslation } from '../helpers'; -import Draw from './L.PM.Draw'; -import Utils from '../L.PM.Utils'; +import Draw from './Draw'; +import Utils from '../GeomanUtils'; export default class GeomanDrawRectangle extends Draw { initialize(map) { @@ -12,7 +12,7 @@ export default class GeomanDrawRectangle extends Draw { enable(options) { // TODO: Think about if these options could be passed globally for all - // instances of L.PM.Draw. So a dev could set drawing style one time as some kind of config + // instances of Geoman.Draw. So a dev could set drawing style one time as some kind of config Util.setOptions(this, options); // enable draw mode @@ -20,7 +20,7 @@ export default class GeomanDrawRectangle extends Draw { // create a new layergroup this._layerGroup = new FeatureGroup(); - this._layerGroup._pmTempLayer = true; + this._layerGroup._geomanTempLayer = true; this._layerGroup.addTo(this._map); // the rectangle we want to draw @@ -32,7 +32,7 @@ export default class GeomanDrawRectangle extends Draw { this.options.pathOptions ); this._setPane(this._layer, 'layerPane'); - this._layer._pmTempLayer = true; + this._layer._geomanTempLayer = true; // this is the marker at the origin of the rectangle // this needs to be present, for tracking purposes, but we'll make it invisible if a user doesn't want to see it! @@ -46,7 +46,7 @@ export default class GeomanDrawRectangle extends Draw { opacity: this.options.cursorMarker ? 1 : 0, }); this._setPane(this._startMarker, 'vertexPane'); - this._startMarker._pmTempLayer = true; + this._startMarker._geomanTempLayer = true; this._layerGroup.addLayer(this._startMarker); // this is the hintmarker on the pointer cursor @@ -57,7 +57,7 @@ export default class GeomanDrawRectangle extends Draw { }), }); this._setPane(this._hintMarker, 'vertexPane'); - this._hintMarker._pmTempLayer = true; + this._hintMarker._geomanTempLayer = true; this._layerGroup.addLayer(this._hintMarker); // show the hintmarker if the option is set @@ -91,7 +91,7 @@ export default class GeomanDrawRectangle extends Draw { zIndexOffset: 100, }); this._setPane(styleMarker, 'vertexPane'); - styleMarker._pmTempLayer = true; + styleMarker._geomanTempLayer = true; this._layerGroup.addLayer(styleMarker); this._styleMarkers.push(styleMarker); @@ -108,7 +108,7 @@ export default class GeomanDrawRectangle extends Draw { this._map.on('pointermove', this._syncHintMarker, this); // toggle the draw button of the Toolbar in case drawing mode got enabled without the button - this._map.pm.Toolbar.toggleButton(this.toolbarButtonName, true); + this._map.geoman.Toolbar.toggleButton(this.toolbarButtonName, true); // an array used in the snapping mixin. // TODO: think about moving this somewhere else? @@ -141,7 +141,7 @@ export default class GeomanDrawRectangle extends Draw { this._map.removeLayer(this._layerGroup); // toggle the draw button of the Toolbar in case drawing mode got disabled without the button - this._map.pm.Toolbar.toggleButton(this.toolbarButtonName, false); + this._map.geoman.Toolbar.toggleButton(this.toolbarButtonName, false); // cleanup snapping if (this.options.snappable) { @@ -310,16 +310,16 @@ export default class GeomanDrawRectangle extends Draw { this._map ); rectangleLayer.setLatLngs(corners); - if (rectangleLayer.pm) { - rectangleLayer.pm._setAngle(this.options.rectangleAngle || 0); + if (rectangleLayer.geoman) { + rectangleLayer.geoman._setAngle(this.options.rectangleAngle || 0); } } this._setPane(rectangleLayer, 'layerPane'); this._finishLayer(rectangleLayer); - rectangleLayer.addTo(this._map.pm._getContainingLayer()); + rectangleLayer.addTo(this._map.geoman._getContainingLayer()); - // fire the pm:create event and pass shape and layer + // fire the geoman:create event and pass shape and layer this._fireCreate(rectangleLayer); const hintMarkerLatLng = this._hintMarker.getLatLng(); diff --git a/src/js/Draw/L.PM.Draw.Text.js b/src/js/Draw/Draw.Text.js similarity index 85% rename from src/js/Draw/L.PM.Draw.Text.js rename to src/js/Draw/Draw.Text.js index 4e882289..109a8869 100644 --- a/src/js/Draw/L.PM.Draw.Text.js +++ b/src/js/Draw/Draw.Text.js @@ -1,6 +1,6 @@ import { DivIcon, Marker, Point, Util } from 'leaflet'; import { getTranslation } from '../helpers'; -import Draw from './L.PM.Draw'; +import Draw from './Draw'; export default class GeomanDrawText extends Draw { initialize(map) { @@ -11,7 +11,7 @@ export default class GeomanDrawText extends Draw { enable(options) { // TODO: Think about if these options could be passed globally for all - // instances of L.PM.Draw. So a dev could set drawing style one time as some kind of config + // instances of L.Geoman.Draw. So a dev could set drawing style one time as some kind of config Util.setOptions(this, options); // change enabled state @@ -21,7 +21,7 @@ export default class GeomanDrawText extends Draw { this._map.on('click', this._createMarker, this); // toggle the draw button of the Toolbar in case drawing mode got enabled without the button - this._map.pm.Toolbar.toggleButton(this.toolbarButtonName, true); + this._map.geoman.Toolbar.toggleButton(this.toolbarButtonName, true); // this is the hintmarker on the pointer cursor this._hintMarker = new Marker(this._map.getCenter(), { @@ -32,7 +32,7 @@ export default class GeomanDrawText extends Draw { }), }); this._setPane(this._hintMarker, 'vertexPane'); - this._hintMarker._pmTempLayer = true; + this._hintMarker._geomanTempLayer = true; this._hintMarker.addTo(this._map); // show the hintmarker if the option is set @@ -89,7 +89,7 @@ export default class GeomanDrawText extends Draw { this._map.off('pointermove', this._showHintMarker, this); // toggle the draw button of the Toolbar in case drawing mode got disabled without the button - this._map.pm.Toolbar.toggleButton(this.toolbarButtonName, false); + this._map.geoman.Toolbar.toggleButton(this.toolbarButtonName, false); // cleanup snapping if (this.options.snappable) { @@ -159,32 +159,32 @@ export default class GeomanDrawText extends Draw { const marker = new Marker(latlng, { textMarker: true, - _textMarkerOverPM: true, // we need to put this into the options, else we can't catch this in the init method + _textMarkerOverGeoman: true, // we need to put this into the options, else we can't catch this in the init method icon: textAreaIcon, }); this._setPane(marker, 'markerPane'); this._finishLayer(marker); - if (!marker.pm) { - // if pm is not create we don't apply dragging to the marker (draggable is applied to the marker, when it is added to the map ) + if (!marker.geoman) { + // if geoman is not create we don't apply dragging to the marker (draggable is applied to the marker, when it is added to the map ) marker.options.draggable = false; } // add marker to the map - marker.addTo(this._map.pm._getContainingLayer()); - if (marker.pm) { - marker.pm.textArea = this.textArea; - Util.setOptions(marker.pm, { + marker.addTo(this._map.geoman._getContainingLayer()); + if (marker.geoman) { + marker.geoman.textArea = this.textArea; + Util.setOptions(marker.geoman, { removeIfEmpty: this.options.textOptions?.removeIfEmpty ?? true, }); const focusAfterDraw = this.options.textOptions?.focusAfterDraw ?? true; - marker.pm._createTextMarker(focusAfterDraw); + marker.geoman._createTextMarker(focusAfterDraw); if (this.options.textOptions?.text) { - marker.pm.setText(this.options.textOptions.text); + marker.geoman.setText(this.options.textOptions.text); } } - // fire the pm:create event and pass shape and marker + // fire the geoman:create event and pass shape and marker this._fireCreate(marker); this._cleanupSnapping(); diff --git a/src/js/Draw/L.PM.Draw.js b/src/js/Draw/Draw.js similarity index 88% rename from src/js/Draw/L.PM.Draw.js rename to src/js/Draw/Draw.js index d03a4789..b7125c6d 100644 --- a/src/js/Draw/L.PM.Draw.js +++ b/src/js/Draw/Draw.js @@ -11,7 +11,7 @@ import { import merge from 'lodash/merge'; import EventMixin from '../Mixins/Events'; import SnapMixin from '../Mixins/Snapping'; -import Utils from '../L.PM.Utils'; +import Utils from '../GeomanUtils'; export default class Draw extends Class { static { @@ -163,7 +163,7 @@ export default class Draw extends Class { } _setGlobalDrawMode() { - // extended to all PM.Draw shapes + // extended to all Geoman.Draw shapes if (this._shape === 'Cut') { this._fireGlobalCutModeToggled(); } else { @@ -180,7 +180,7 @@ export default class Draw extends Class { layer instanceof ImageOverlay ) { // filter out everything that's leaflet-geoman specific temporary stuff - if (!layer._pmTempLayer) { + if (!layer._geomanTempLayer) { layers.push(layer); } } @@ -203,7 +203,7 @@ export default class Draw extends Class { throw new TypeError('Draw Type already exists'); } if (!Draw[instance]) { - throw new TypeError(`There is no class L.PM.Draw.${instance}`); + throw new TypeError(`There is no class L.Geoman.Draw.${instance}`); } this[name] = new Draw[instance](this._map); @@ -244,13 +244,13 @@ export default class Draw extends Class { } _finishLayer(layer) { - if (layer.pm) { - // add the pm options from drawing to the new layer (edit) - layer.pm.setOptions(this.options); + if (layer.geoman) { + // add the geoman options from drawing to the new layer (edit) + layer.geoman.setOptions(this.options); // set the shape (can be a custom shape) - layer.pm._shape = this._shape; - // apply the map to the new created layer in the pm object - layer.pm._map = this._map; + layer.geoman._shape = this._shape; + // apply the map to the new created layer in the geoman object + layer.geoman._map = this._map; } this._addDrawnLayerProp(layer); } @@ -262,24 +262,24 @@ export default class Draw extends Class { _setPane(layer, type) { if (type === 'layerPane') { layer.options.pane = - (this._map.pm.globalOptions.panes && - this._map.pm.globalOptions.panes.layerPane) || + (this._map.geoman.globalOptions.panes && + this._map.geoman.globalOptions.panes.layerPane) || 'overlayPane'; } else if (type === 'vertexPane') { layer.options.pane = - (this._map.pm.globalOptions.panes && - this._map.pm.globalOptions.panes.vertexPane) || + (this._map.geoman.globalOptions.panes && + this._map.geoman.globalOptions.panes.vertexPane) || 'markerPane'; } else if (type === 'markerPane') { layer.options.pane = - (this._map.pm.globalOptions.panes && - this._map.pm.globalOptions.panes.markerPane) || + (this._map.geoman.globalOptions.panes && + this._map.geoman.globalOptions.panes.markerPane) || 'markerPane'; } } _isFirstLayer() { const map = this._map || this._layer._map; - return map.pm.getGeomanLayers().length === 0; + return map.geoman.getGeomanLayers().length === 0; } } diff --git a/src/js/Edit/L.PM.Edit.Circle.js b/src/js/Edit/Edit.Circle.js similarity index 91% rename from src/js/Edit/L.PM.Edit.Circle.js rename to src/js/Edit/Edit.Circle.js index 90870938..e96d31f3 100644 --- a/src/js/Edit/L.PM.Edit.Circle.js +++ b/src/js/Edit/Edit.Circle.js @@ -1,5 +1,5 @@ -import Utils from '../L.PM.Utils'; -import GeomanEditCircleMarker from './L.PM.Edit.CircleMarker'; +import Utils from '../GeomanUtils'; +import GeomanEditCircleMarker from './Edit.CircleMarker'; export default class GeomanEditCircle extends GeomanEditCircleMarker { _shape = 'Circle'; @@ -43,7 +43,7 @@ export default class GeomanEditCircle extends GeomanEditCircleMarker { _onDragEnd() {} _updateHiddenPolyCircle() { - const crsSimple = this._map && this._map.pm._isCRSSimple(); + const crsSimple = this._map && this._map.geoman._isCRSSimple(); if (this._hiddenPolyCircle) { this._hiddenPolyCircle.setLatLngs( Utils.circleToPolygon(this._layer, 200, !crsSimple).getLatLngs() diff --git a/src/js/Edit/L.PM.Edit.CircleMarker.js b/src/js/Edit/Edit.CircleMarker.js similarity index 92% rename from src/js/Edit/L.PM.Edit.CircleMarker.js rename to src/js/Edit/Edit.CircleMarker.js index f951f079..d4e93a14 100644 --- a/src/js/Edit/L.PM.Edit.CircleMarker.js +++ b/src/js/Edit/Edit.CircleMarker.js @@ -8,8 +8,8 @@ import { Util, } from 'leaflet'; import { destinationOnLine } from '../helpers'; -import Edit from './L.PM.Edit'; -import Utils from '../L.PM.Utils'; +import Edit from './Edit'; +import Utils from '../GeomanUtils'; export default class GeomanEditCircleMarker extends Edit { _shape = 'CircleMarker'; @@ -62,8 +62,8 @@ export default class GeomanEditCircleMarker extends Edit { _extendingEnable() { // if CircleMarker is dragged while draw mode - this._layer.on('pm:dragstart', this._onDragStart, this); - this._layer.on('pm:dragend', this._onDragEnd, this); + this._layer.on('geoman:dragstart', this._onDragStart, this); + this._layer.on('geoman:dragend', this._onDragEnd, this); } disable() { @@ -181,7 +181,7 @@ export default class GeomanEditCircleMarker extends Edit { // add markerGroup to map, markerGroup includes regular and middle markers this._helperLayers = new FeatureGroup(); - this._helperLayers._pmTempLayer = true; + this._helperLayers._geomanTempLayer = true; this._helperLayers.addTo(map); // create marker for each coordinate @@ -207,7 +207,7 @@ export default class GeomanEditCircleMarker extends Edit { const B = markerB.getLatLng(); this._hintline = new Polyline([A, B], this.options.hintlineStyle); this._setPane(this._hintline, 'layerPane'); - this._hintline._pmTempLayer = true; + this._hintline._geomanTempLayer = true; this._helperLayers.addLayer(this._hintline); } @@ -236,7 +236,7 @@ export default class GeomanEditCircleMarker extends Edit { this._setPane(marker, 'vertexPane'); marker._origLatLng = latlng; - marker._pmTempLayer = true; + marker._geomanTempLayer = true; marker.on('dragstart', this._onVertexDragStart, this); marker.on('drag', this._onVertexDrag, this); @@ -328,7 +328,7 @@ export default class GeomanEditCircleMarker extends Edit { } _onDragStart() { - this._map.pm.Draw.CircleMarker._layerIsDragging = true; + this._map.geoman.Draw.CircleMarker._layerIsDragging = true; } _onVertexDragStart(e) { @@ -366,7 +366,7 @@ export default class GeomanEditCircleMarker extends Edit { } _onDragEnd() { - this._map.pm.Draw.CircleMarker._layerIsDragging = false; + this._map.geoman.Draw.CircleMarker._layerIsDragging = false; } // _initSnappableMarkers when option resizeable is not true @@ -377,23 +377,23 @@ export default class GeomanEditCircleMarker extends Edit { this.options.snapSegment = this.options.snapSegment === undefined ? true : this.options.snapSegment; - marker.off('pm:drag', this._handleSnapping, this); - marker.on('pm:drag', this._handleSnapping, this); + marker.off('geoman:drag', this._handleSnapping, this); + marker.on('geoman:drag', this._handleSnapping, this); - marker.off('pm:dragend', this._cleanupSnapping, this); - marker.on('pm:dragend', this._cleanupSnapping, this); + marker.off('geoman:dragend', this._cleanupSnapping, this); + marker.on('geoman:dragend', this._cleanupSnapping, this); - marker.off('pm:dragstart', this._unsnap, this); - marker.on('pm:dragstart', this._unsnap, this); + marker.off('geoman:dragstart', this._unsnap, this); + marker.on('geoman:dragstart', this._unsnap, this); } // _disableSnapping when option resizeable is not true _disableSnappingDrag() { const marker = this._layer; - marker.off('pm:drag', this._handleSnapping, this); - marker.off('pm:dragend', this._cleanupSnapping, this); - marker.off('pm:dragstart', this._unsnap, this); + marker.off('geoman:drag', this._handleSnapping, this); + marker.off('geoman:dragend', this._cleanupSnapping, this); + marker.off('geoman:dragstart', this._unsnap, this); } _updateHiddenPolyCircle() { @@ -407,7 +407,7 @@ export default class GeomanEditCircleMarker extends Edit { const _layer = new Circle(this._layer.getLatLng(), this._layer.options); _layer.setRadius(radius); - const crsSimple = map && map.pm._isCRSSimple(); + const crsSimple = map && map.geoman._isCRSSimple(); if (this._hiddenPolyCircle) { this._hiddenPolyCircle.setLatLngs( Utils.circleToPolygon(_layer, 200, !crsSimple).getLatLngs() diff --git a/src/js/Edit/L.PM.Edit.ImageOverlay.js b/src/js/Edit/Edit.ImageOverlay.js similarity index 98% rename from src/js/Edit/L.PM.Edit.ImageOverlay.js rename to src/js/Edit/Edit.ImageOverlay.js index 3c6214e7..d4ce68ee 100644 --- a/src/js/Edit/L.PM.Edit.ImageOverlay.js +++ b/src/js/Edit/Edit.ImageOverlay.js @@ -1,5 +1,5 @@ import { Util } from 'leaflet'; -import Edit from './L.PM.Edit'; +import Edit from './Edit'; export default class GeomanEditImageOverlay extends Edit { _shape = 'ImageOverlay'; diff --git a/src/js/Edit/L.PM.Edit.LayerGroup.js b/src/js/Edit/Edit.LayerGroup.js similarity index 76% rename from src/js/Edit/L.PM.Edit.LayerGroup.js rename to src/js/Edit/Edit.LayerGroup.js index 3e455050..aae0c12a 100644 --- a/src/js/Edit/L.PM.Edit.LayerGroup.js +++ b/src/js/Edit/Edit.LayerGroup.js @@ -1,8 +1,8 @@ import { Class, LayerGroup, Util } from 'leaflet'; -import Geoman from '../L.PM'; +import Geoman from '../Geoman'; -// LayerGroup doesn't inherit from L.PM.Edit because it's just calling L.PM.Edit.Polygon -// (which inherits from L.PM.Edit) for each layer, +// LayerGroup doesn't inherit from Geoman.Edit because it's just calling Geoman.Edit.Polygon +// (which inherits from Geoman.Edit) for each layer, // so it's not really a parent class export default class GeomanEditLayerGroup extends Class { initialize(layerGroup) { @@ -18,14 +18,14 @@ export default class GeomanEditLayerGroup extends Class { // https://github.com/Leaflet/Leaflet/issues/4861 const addThrottle = (e) => { - if (e.layer._pmTempLayer) { + if (e.layer._geomanTempLayer) { return; } this._layers = this.getLayers(); const _initLayers = this._layers.filter( (layer) => - !layer.pm._parentLayerGroup || - !(this._layerGroup._leaflet_id in layer.pm._parentLayerGroup) + !layer.geoman._parentLayerGroup || + !(this._layerGroup._leaflet_id in layer.geoman._parentLayerGroup) ); // init the newly added layers (can be multiple because of the throttle) _initLayers.forEach((layer) => { @@ -36,7 +36,7 @@ export default class GeomanEditLayerGroup extends Class { if ( _initLayers.length > 0 && this._getMap() && - this._getMap().pm.globalEditModeEnabled() + this._getMap().geoman.globalEditModeEnabled() ) { if (this.enabled()) { this.enable(this.getOptions()); @@ -59,7 +59,7 @@ export default class GeomanEditLayerGroup extends Class { ); const removeThrottle = (e) => { - if (e.target._pmTempLayer) { + if (e.target._geomanTempLayer) { return; } this._layers = this.getLayers(); @@ -82,10 +82,10 @@ export default class GeomanEditLayerGroup extends Class { if (layer instanceof LayerGroup) { if (_layerIds.indexOf(layer._leaflet_id) === -1) { _layerIds.push(layer._leaflet_id); - layer.pm.enable(options, _layerIds); + layer.geoman.enable(options, _layerIds); } } else { - layer.pm.enable(options); + layer.geoman.enable(options); } }); } @@ -98,10 +98,10 @@ export default class GeomanEditLayerGroup extends Class { if (layer instanceof LayerGroup) { if (_layerIds.indexOf(layer._leaflet_id) === -1) { _layerIds.push(layer._leaflet_id); - layer.pm.disable(_layerIds); + layer.geoman.disable(_layerIds); } } else { - layer.pm.disable(); + layer.geoman.disable(); } }); } @@ -114,11 +114,11 @@ export default class GeomanEditLayerGroup extends Class { if (layer instanceof LayerGroup) { if (_layerIds.indexOf(layer._leaflet_id) === -1) { _layerIds.push(layer._leaflet_id); - return layer.pm.enabled(_layerIds); + return layer.geoman.enabled(_layerIds); } return false; // enabled is already returned because this is not the first time, so we can return always false } - return layer.pm.enabled(); + return layer.geoman.enabled(); }); return !!enabled; } @@ -132,10 +132,10 @@ export default class GeomanEditLayerGroup extends Class { if (layer instanceof LayerGroup) { if (_layerIds.indexOf(layer._leaflet_id) === -1) { _layerIds.push(layer._leaflet_id); - layer.pm.toggleEdit(options, _layerIds); + layer.geoman.toggleEdit(options, _layerIds); } } else { - layer.pm.toggleEdit(options); + layer.geoman.toggleEdit(options); } }); } @@ -143,23 +143,23 @@ export default class GeomanEditLayerGroup extends Class { _initLayer(layer) { // add reference for the group to each layer inside said group by id, a layer can have multiple groups const id = Util.stamp(this._layerGroup); - if (!layer.pm._parentLayerGroup) { - layer.pm._parentLayerGroup = {}; + if (!layer.geoman._parentLayerGroup) { + layer.geoman._parentLayerGroup = {}; } - layer.pm._parentLayerGroup[id] = this._layerGroup; + layer.geoman._parentLayerGroup[id] = this._layerGroup; } _removeLayerFromGroup(layer) { - if (layer.pm && layer.pm._layerGroup) { + if (layer.geoman && layer.geoman._layerGroup) { const id = Util.stamp(this._layerGroup); - delete layer.pm._layerGroup[id]; + delete layer.geoman._layerGroup[id]; } } dragging() { this._layers = this.getLayers(); if (this._layers) { - const dragging = this._layers.find((layer) => layer.pm.dragging()); + const dragging = this._layers.find((layer) => layer.geoman.dragging()); return !!dragging; } return false; @@ -188,7 +188,7 @@ export default class GeomanEditLayerGroup extends Class { if (_layerIds.indexOf(layer._leaflet_id) === -1) { _layerIds.push(layer._leaflet_id); layers = layers.concat( - layer.pm.getLayers(true, true, true, _layerIds) + layer.geoman.getLayers(true, true, true, _layerIds) ); } } @@ -203,14 +203,14 @@ export default class GeomanEditLayerGroup extends Class { } if (filterGeoman) { // filter out layers that don't have leaflet-geoman - layers = layers.filter((layer) => !!layer.pm); + layers = layers.filter((layer) => !!layer.geoman); // filter out everything that's leaflet-geoman specific temporary stuff - layers = layers.filter((layer) => !layer._pmTempLayer); + layers = layers.filter((layer) => !layer._geomanTempLayer); // filter out everything that ignore leaflet-geoman layers = layers.filter( (layer) => - (!Geoman.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) - (Geoman.optIn && layer.options.pmIgnore === false) // if optIn is true and pmIgnore is false); + (!Geoman.optIn && !layer.options.geomanIgnore) || // if optIn is not set / true and geomanIgnore is not set / true (default) + (Geoman.optIn && layer.options.geomanIgnore === false) // if optIn is true and geomanIgnore is false); ); } return layers; @@ -222,14 +222,14 @@ export default class GeomanEditLayerGroup extends Class { } this.options = options; this._layers.forEach((layer) => { - if (layer.pm) { + if (layer.geoman) { if (layer instanceof LayerGroup) { if (_layerIds.indexOf(layer._leaflet_id) === -1) { _layerIds.push(layer._leaflet_id); - layer.pm.setOptions(options, _layerIds); + layer.geoman.setOptions(options, _layerIds); } } else { - layer.pm.setOptions(options); + layer.geoman.setOptions(options); } } }); diff --git a/src/js/Edit/L.PM.Edit.Marker.js b/src/js/Edit/Edit.Marker.js similarity index 74% rename from src/js/Edit/L.PM.Edit.Marker.js rename to src/js/Edit/Edit.Marker.js index 9aa1832c..d08ce46c 100644 --- a/src/js/Edit/L.PM.Edit.Marker.js +++ b/src/js/Edit/Edit.Marker.js @@ -1,5 +1,5 @@ import { Util } from 'leaflet'; -import Edit from './L.PM.Edit'; +import Edit from './Edit'; export default class GeomanEditMarker extends Edit { _shape = 'Marker'; @@ -9,7 +9,7 @@ export default class GeomanEditMarker extends Edit { this._layer = layer; this._enabled = false; - // register dragend event e.g. to fire pm:edit + // register dragend event e.g. to fire geoman:edit this._layer.on('dragend', this._onDragEnd, this); } @@ -35,8 +35,8 @@ export default class GeomanEditMarker extends Edit { this._enabled = true; - this._layer.on('pm:dragstart', this._onDragStart, this); - this._layer.on('pm:dragend', this._onMarkerDragEnd, this); + this._layer.on('geoman:dragstart', this._onDragStart, this); + this._layer.on('geoman:dragend', this._onMarkerDragEnd, this); this._fireEnable(); } @@ -96,17 +96,17 @@ export default class GeomanEditMarker extends Edit { _removeMarker(e) { const marker = e.target; marker.remove(); - // TODO: find out why this is fired manually, shouldn't it be catched by L.PM.Map 'layerremove'? + // TODO: find out why this is fired manually, shouldn't it be catched by GeomanMap 'layerremove'? this._fireRemove(marker); this._fireRemove(this._map, marker); } _onDragStart() { - this._map.pm.Draw.Marker._layerIsDragging = true; + this._map.geoman.Draw.Marker._layerIsDragging = true; } _onMarkerDragEnd() { - this._map.pm.Draw.Marker._layerIsDragging = false; + this._map.geoman.Draw.Marker._layerIsDragging = false; } _onDragEnd() { @@ -122,20 +122,20 @@ export default class GeomanEditMarker extends Edit { this.options.snapSegment = this.options.snapSegment === undefined ? true : this.options.snapSegment; - marker.off('pm:drag', this._handleSnapping, this); - marker.on('pm:drag', this._handleSnapping, this); + marker.off('geoman:drag', this._handleSnapping, this); + marker.on('geoman:drag', this._handleSnapping, this); - marker.off('pm:dragend', this._cleanupSnapping, this); - marker.on('pm:dragend', this._cleanupSnapping, this); + marker.off('geoman:dragend', this._cleanupSnapping, this); + marker.on('geoman:dragend', this._cleanupSnapping, this); - marker.off('pm:dragstart', this._unsnap, this); - marker.on('pm:dragstart', this._unsnap, this); + marker.off('geoman:dragstart', this._unsnap, this); + marker.on('geoman:dragstart', this._unsnap, this); } _disableSnapping() { const marker = this._layer; - marker.off('pm:drag', this._handleSnapping, this); - marker.off('pm:dragend', this._cleanupSnapping, this); - marker.off('pm:dragstart', this._unsnap, this); + marker.off('geoman:drag', this._handleSnapping, this); + marker.off('geoman:dragend', this._cleanupSnapping, this); + marker.off('geoman:dragstart', this._unsnap, this); } } diff --git a/src/js/Edit/L.PM.Edit.Polygon.js b/src/js/Edit/Edit.Polygon.js similarity index 94% rename from src/js/Edit/L.PM.Edit.Polygon.js rename to src/js/Edit/Edit.Polygon.js index 4d675671..5c6135cc 100644 --- a/src/js/Edit/L.PM.Edit.Polygon.js +++ b/src/js/Edit/Edit.Polygon.js @@ -1,6 +1,6 @@ import lineIntersect from '@turf/line-intersect'; import { Polyline } from 'leaflet'; -import GeomanEditPolyline from './L.PM.Edit.Polyline'; +import GeomanEditPolyline from './Edit.Polyline'; export default class GeomanEditPolygon extends GeomanEditPolyline { _shape = 'Polygon'; diff --git a/src/js/Edit/L.PM.Edit.Polyline.js b/src/js/Edit/Edit.Polyline.js similarity index 99% rename from src/js/Edit/L.PM.Edit.Polyline.js rename to src/js/Edit/Edit.Polyline.js index 93562bf8..9be3cb10 100644 --- a/src/js/Edit/L.PM.Edit.Polyline.js +++ b/src/js/Edit/Edit.Polyline.js @@ -2,7 +2,7 @@ import kinks from '@turf/kinks'; import lineIntersect from '@turf/line-intersect'; import get from 'lodash/get'; import { copyLatLngs, hasValues, removeEmptyCoordRings } from '../helpers'; -import Edit from './L.PM.Edit'; +import Edit from './Edit'; import { DivIcon, @@ -13,7 +13,7 @@ import { Util, } from 'leaflet'; import MarkerLimits from '../Mixins/MarkerLimits'; -import Utils from '../L.PM.Utils'; +import Utils from '../GeomanUtils'; // Shit's getting complicated in here with Multipolygon Support. So here's a quick note about it: // Multipolygons with holes means lots of nested, multidimensional arrays. @@ -70,7 +70,7 @@ export default class GeomanEditPolyline extends Edit { if (!this.options.allowSelfIntersection) { this._layer.on( - 'pm:vertexremoved', + 'geoman:vertexremoved', this._handleSelfIntersectionOnVertexRemoval, this ); @@ -109,7 +109,7 @@ export default class GeomanEditPolyline extends Edit { if (!this.options.allowSelfIntersection) { this._layer.off( - 'pm:vertexremoved', + 'geoman:vertexremoved', this._handleSelfIntersectionOnVertexRemoval, this ); @@ -161,7 +161,7 @@ export default class GeomanEditPolyline extends Edit { // add markerGroup to map, markerGroup includes regular and middle markers this._markerGroup = new FeatureGroup(); - this._markerGroup._pmTempLayer = true; + this._markerGroup._geomanTempLayer = true; // handle coord-rings (outer, inner, etc) const handleRing = (coordsArr) => { @@ -206,7 +206,7 @@ export default class GeomanEditPolyline extends Edit { }); this._setPane(marker, 'vertexPane'); - marker._pmTempLayer = true; + marker._geomanTempLayer = true; if (this.options.rotate) { marker.on('dragstart', this._onRotateStart, this); diff --git a/src/js/Edit/L.PM.Edit.Rectangle.js b/src/js/Edit/Edit.Rectangle.js similarity index 96% rename from src/js/Edit/L.PM.Edit.Rectangle.js rename to src/js/Edit/Edit.Rectangle.js index bd53db9f..806f54bc 100644 --- a/src/js/Edit/L.PM.Edit.Rectangle.js +++ b/src/js/Edit/Edit.Rectangle.js @@ -2,8 +2,8 @@ // https://github.com/Leaflet/Leaflet.draw/blob/master/src/edit/handler/Edit.Rectangle.js import { DivIcon, FeatureGroup, Marker } from 'leaflet'; import { calcAngle } from '../helpers'; -import Utils from '../L.PM.Utils'; -import GeomanEditPolygon from './L.PM.Edit.Polygon'; +import Utils from '../GeomanUtils'; +import GeomanEditPolygon from './Edit.Polygon'; export default class GeomanEditRectangle extends GeomanEditPolygon { _shape = 'Rectangle'; @@ -19,7 +19,7 @@ export default class GeomanEditRectangle extends GeomanEditPolygon { // add markerGroup to map, markerGroup includes regular and middle markers this._markerGroup = new FeatureGroup(); - this._markerGroup._pmTempLayer = true; + this._markerGroup._geomanTempLayer = true; map.addLayer(this._markerGroup); // create markers for four corners of rectangle @@ -59,7 +59,7 @@ export default class GeomanEditRectangle extends GeomanEditPolygon { marker._origLatLng = latlng; marker._index = index; - marker._pmTempLayer = true; + marker._geomanTempLayer = true; marker.on('click', this._onVertexClick, this); @@ -82,7 +82,7 @@ export default class GeomanEditRectangle extends GeomanEditPolygon { }); } - // Empty callback for 'contextmenu' binding set in L.PM.Edit.Polyline.js's _createMarker method (AKA, right-click on marker event) + // Empty callback for 'contextmenu' binding set in Geoman.Edit.Polyline.js's _createMarker method (AKA, right-click on marker event) // (A Rectangle is designed to always remain a "true" rectangle -- if you want it editable, use Polygon Tool instead!!!) _removeMarker() { // The method, it does nothing!!! diff --git a/src/js/Edit/L.PM.Edit.Text.js b/src/js/Edit/Edit.Text.js similarity index 92% rename from src/js/Edit/L.PM.Edit.Text.js rename to src/js/Edit/Edit.Text.js index 4f823921..56dd6ec4 100644 --- a/src/js/Edit/L.PM.Edit.Text.js +++ b/src/js/Edit/Edit.Text.js @@ -1,6 +1,6 @@ import { DomEvent, Util } from 'leaflet'; -import Edit from './L.PM.Edit'; -import Draw from '../Draw/L.PM.Draw'; +import Edit from './Edit'; +import Draw from '../Draw/Draw'; export default class GeomanEditCircleText extends Edit { _shape = 'Text'; @@ -117,21 +117,21 @@ export default class GeomanEditCircleText extends Edit { this.options.snapSegment = this.options.snapSegment === undefined ? true : this.options.snapSegment; - marker.off('pm:drag', this._handleSnapping, this); - marker.on('pm:drag', this._handleSnapping, this); + marker.off('geoman:drag', this._handleSnapping, this); + marker.on('geoman:drag', this._handleSnapping, this); - marker.off('pm:dragend', this._cleanupSnapping, this); - marker.on('pm:dragend', this._cleanupSnapping, this); + marker.off('geoman:dragend', this._cleanupSnapping, this); + marker.on('geoman:dragend', this._cleanupSnapping, this); - marker.off('pm:dragstart', this._unsnap, this); - marker.on('pm:dragstart', this._unsnap, this); + marker.off('geoman:dragstart', this._unsnap, this); + marker.on('geoman:dragstart', this._unsnap, this); } _disableSnapping() { const marker = this._layer; - marker.off('pm:drag', this._handleSnapping, this); - marker.off('pm:dragend', this._cleanupSnapping, this); - marker.off('pm:dragstart', this._unsnap, this); + marker.off('geoman:drag', this._handleSnapping, this); + marker.off('geoman:dragend', this._cleanupSnapping, this); + marker.off('geoman:dragstart', this._unsnap, this); } _autoResize() { diff --git a/src/js/Edit/L.PM.Edit.js b/src/js/Edit/Edit.js similarity index 89% rename from src/js/Edit/L.PM.Edit.js rename to src/js/Edit/Edit.js index 707be553..40a089cd 100644 --- a/src/js/Edit/L.PM.Edit.js +++ b/src/js/Edit/Edit.js @@ -61,25 +61,25 @@ export default class Edit extends Class { _setPane(layer, type) { if (type === 'layerPane') { layer.options.pane = - (this._map.pm.globalOptions.panes && - this._map.pm.globalOptions.panes.layerPane) || + (this._map.geoman.globalOptions.panes && + this._map.geoman.globalOptions.panes.layerPane) || 'overlayPane'; } else if (type === 'vertexPane') { layer.options.pane = - (this._map.pm.globalOptions.panes && - this._map.pm.globalOptions.panes.vertexPane) || + (this._map.geoman.globalOptions.panes && + this._map.geoman.globalOptions.panes.vertexPane) || 'markerPane'; } else if (type === 'markerPane') { layer.options.pane = - (this._map.pm.globalOptions.panes && - this._map.pm.globalOptions.panes.markerPane) || + (this._map.geoman.globalOptions.panes && + this._map.geoman.globalOptions.panes.markerPane) || 'markerPane'; } } remove() { const map = this._map || this._layer._map; - map.pm.removeLayer({ target: this._layer }); + map.geoman.removeLayer({ target: this._layer }); } _vertexValidation(type, e) { diff --git a/src/js/Geoman.js b/src/js/Geoman.js new file mode 100644 index 00000000..120f76aa --- /dev/null +++ b/src/js/Geoman.js @@ -0,0 +1,281 @@ +/* A Leaflet Plugin For Editing Geometry Layers in Leaflet 1.0 + * Copyright (C) Geoman.io and Sumit Kumar - All Rights Reserved + * Unauthorized copying of this file, via any medium is strictly prohibited + * Proprietary and confidential + * Written by Sumit Kumar , January 2020 + * Twitter: @TweetsOfSumit + * OSS Repo: https://github.com/geoman-io/leaflet-geoman + * Get Pro: https://geoman.io + */ + +import { + Canvas, + Circle, + CircleMarker, + DomEvent, + ImageOverlay, + LayerGroup, + LeafletMap, + Marker, + Polygon, + Polyline, + Rectangle, +} from 'leaflet'; + +import packageInfo from '../../package.json'; + +import GeomanMap from './GeomanMap'; +import Toolbar from './Toolbar/GeomanToolbar'; + +import Draw from './Draw/Draw'; +import GeomanDrawCircleMarker from './Draw/Draw.CircleMarker'; +import GeomanDrawCircle from './Draw/Draw.Circle'; +import GeomanDrawPolyline from './Draw/Draw.Polyline'; +import GeomanDrawMarker from './Draw/Draw.Marker'; +import GeomanDrawPolygon from './Draw/Draw.Polygon'; +import GeomanDrawRectangle from './Draw/Draw.Rectangle'; +import GeomanCut from './Draw/Draw.Cut'; +import GeomanDrawText from './Draw/Draw.Text'; + +Draw.CircleMarker = GeomanDrawCircleMarker; +Draw.Circle = GeomanDrawCircle; +Draw.Polyline = GeomanDrawPolyline; +Draw.Marker = GeomanDrawMarker; +Draw.Polygon = GeomanDrawPolygon; +Draw.Rectangle = GeomanDrawRectangle; +Draw.Cut = GeomanCut; +Draw.Text = GeomanDrawText; + +import Edit from './Edit/Edit'; +import GeomanEditCircleMarker from './Edit/Edit.CircleMarker'; +import GeomanEditCircle from './Edit/Edit.Circle'; +import GeomanEditImageOverlay from './Edit/Edit.ImageOverlay'; +import GeomanEditLayerGroup from './Edit/Edit.LayerGroup'; +import GeomanEditPolyline from './Edit/Edit.Polyline'; +import GeomanEditMarker from './Edit/Edit.Marker'; +import GeomanEditPolygon from './Edit/Edit.Polygon'; +import GeomanEditRectangle from './Edit/Edit.Rectangle'; +import GeomanEditText from './Edit/Edit.Text'; + +Edit.CircleMarker = GeomanEditCircleMarker; +Edit.Circle = GeomanEditCircle; +Edit.ImageOverlay = GeomanEditImageOverlay; +Edit.LayerGroup = GeomanEditLayerGroup; +Edit.Polyline = GeomanEditPolyline; +Edit.Marker = GeomanEditMarker; +Edit.Polygon = GeomanEditPolygon; +Edit.Rectangle = GeomanEditRectangle; +Edit.Text = GeomanEditText; + +import '../css/controls.css'; +import '../css/layers.css'; + +import Matrix from './helpers/Matrix'; +import * as helpers from './helpers'; + +import Utils from './GeomanUtils'; + +const Geoman = { + version: packageInfo.version, + Map: GeomanMap, + Toolbar, + Draw, + Edit, + Utils, + Matrix, + helpers, + activeLang: 'en', + optIn: false, + initialize(options) { + this.addInitHooks(options); + }, + setOptIn(value) { + this.optIn = !!value; + }, + addInitHooks() { + function initMap() { + this.geoman = undefined; + + if (Geoman.optIn) { + if (this.options.geomanIgnore === false) { + this.geoman = new GeomanMap(this); + } + } else if (!this.options.geomanIgnore) { + this.geoman = new GeomanMap(this); + } + + if (this.geoman) { + this.geoman.setGlobalOptions({}); + } + } + + LeafletMap.addInitHook(initMap); + + function initLayerGroup() { + this.geoman = undefined; + if (Geoman.optIn) { + if (this.options.geomanIgnore === false) { + this.geoman = new Edit.LayerGroup(this); + } + } else if (!this.options.geomanIgnore) { + this.geoman = new Edit.LayerGroup(this); + } + } + + LayerGroup.addInitHook(initLayerGroup); + + function initMarker() { + this.geoman = undefined; + + if (Geoman.optIn) { + if (this.options.geomanIgnore === false) { + if (this.options.textMarker) { + this.geoman = new Edit.Text(this); + if (!this.options._textMarkerOverGeoman) { + this.geoman._initTextMarker(); + } + delete this.options._textMarkerOverGeoman; + } else { + this.geoman = new Edit.Marker(this); + } + } + } else if (!this.options.geomanIgnore) { + if (this.options.textMarker) { + this.geoman = new Edit.Text(this); + if (!this.options._textMarkerOverGeoman) { + this.geoman._initTextMarker(); + } + delete this.options._textMarkerOverGeoman; + } else { + this.geoman = new Edit.Marker(this); + } + } + } + Marker.addInitHook(initMarker); + + function initCircleMarker() { + this.geoman = undefined; + + if (Geoman.optIn) { + if (this.options.geomanIgnore === false) { + this.geoman = new Edit.CircleMarker(this); + } + } else if (!this.options.geomanIgnore) { + this.geoman = new Edit.CircleMarker(this); + } + } + CircleMarker.addInitHook(initCircleMarker); + + function initPolyline() { + this.geoman = undefined; + + if (Geoman.optIn) { + if (this.options.geomanIgnore === false) { + this.geoman = new Edit.Polyline(this); + } + } else if (!this.options.geomanIgnore) { + this.geoman = new Edit.Polyline(this); + } + } + + Polyline.addInitHook(initPolyline); + + function initPolygon() { + this.geoman = undefined; + + if (Geoman.optIn) { + if (this.options.geomanIgnore === false) { + this.geoman = new Edit.Polygon(this); + } + } else if (!this.options.geomanIgnore) { + this.geoman = new Edit.Polygon(this); + } + } + + Polygon.addInitHook(initPolygon); + + function initRectangle() { + this.geoman = undefined; + + if (Geoman.optIn) { + if (this.options.geomanIgnore === false) { + this.geoman = new Edit.Rectangle(this); + } + } else if (!this.options.geomanIgnore) { + this.geoman = new Edit.Rectangle(this); + } + } + + Rectangle.addInitHook(initRectangle); + + function initCircle() { + this.geoman = undefined; + + if (Geoman.optIn) { + if (this.options.geomanIgnore === false) { + this.geoman = new Edit.Circle(this); + } + } else if (!this.options.geomanIgnore) { + this.geoman = new Edit.Circle(this); + } + } + + Circle.addInitHook(initCircle); + + function initImageOverlay() { + this.geoman = undefined; + + if (Geoman.optIn) { + if (this.options.geomanIgnore === false) { + this.geoman = new Edit.ImageOverlay(this); + } + } else if (!this.options.geomanIgnore) { + this.geoman = new Edit.ImageOverlay(this); + } + } + + ImageOverlay.addInitHook(initImageOverlay); + }, + reInitLayer(layer) { + if (layer instanceof LayerGroup) { + layer.eachLayer((_layer) => { + this.reInitLayer(_layer); + }); + } + if (layer.geoman) { + // Geoman is already added to the layer + } else if (Geoman.optIn && layer.options.geomanIgnore !== false) { + // Opt-In is true and geomanIgnore is not false + } else if (layer.options.geomanIgnore) { + // geomanIgnore is true + } else if (layer instanceof LeafletMap) { + layer.geoman = new Geoman.Map(layer); + } else if (layer instanceof Marker) { + if (layer.options.textMarker) { + layer.geoman = new Edit.Text(layer); + layer.geoman._initTextMarker(); + layer.geoman._createTextMarker(false); + } else { + layer.geoman = new Edit.Marker(layer); + } + } else if (layer instanceof Circle) { + layer.geoman = new Edit.Circle(layer); + } else if (layer instanceof CircleMarker) { + layer.geoman = new Edit.CircleMarker(layer); + } else if (layer instanceof Rectangle) { + layer.geoman = new Edit.Rectangle(layer); + } else if (layer instanceof Polygon) { + layer.geoman = new Edit.Polygon(layer); + } else if (layer instanceof Polyline) { + layer.geoman = new Edit.Polyline(layer); + } else if (layer instanceof LayerGroup) { + layer.geoman = new Edit.LayerGroup(layer); + } else if (layer instanceof ImageOverlay) { + layer.geoman = new Edit.ImageOverlay(layer); + } + }, +}; + +// initialize leaflet-geoman +// Geoman.initialize(); +export default Geoman; diff --git a/src/js/L.PM.Map.js b/src/js/GeomanMap.js similarity index 84% rename from src/js/L.PM.Map.js rename to src/js/GeomanMap.js index 8e91abc5..c9983f41 100644 --- a/src/js/L.PM.Map.js +++ b/src/js/GeomanMap.js @@ -8,10 +8,10 @@ import GlobalEditMode from './Mixins/Modes/Mode.Edit'; import GlobalRemovalMode from './Mixins/Modes/Mode.Removal'; import GlobalRotateMode from './Mixins/Modes/Mode.Rotate'; import { getRenderer } from './helpers'; -import Draw from './Draw/L.PM.Draw'; -import Toolbar from './Toolbar/L.PM.Toolbar'; -import Geoman from './L.PM'; -import Utils from './L.PM.Utils'; +import Draw from './Draw/Draw'; +import Toolbar from './Toolbar/GeomanToolbar'; +import Geoman from './Geoman'; +import Utils from './GeomanUtils'; export default class GeomanMap extends Class { static { @@ -87,7 +87,7 @@ export default class GeomanMap extends Class { } Geoman.activeLang = lang; - this.map.pm.Toolbar.reinit(); + this.map.geoman.Toolbar.reinit(); this._fireLangChange(oldLang, lang, fallback, translations[lang]); } @@ -120,9 +120,9 @@ export default class GeomanMap extends Class { const ignore = optionsModifier.ignoreShapes || []; const mergeOptions = optionsModifier.merge || false; - this.map.pm.Draw.shapes.forEach((shape) => { + this.map.geoman.Draw.shapes.forEach((shape) => { if (ignore.indexOf(shape) === -1) { - this.map.pm.Draw[shape].setPathOptions(options, mergeOptions); + this.map.geoman.Draw[shape].setPathOptions(options, mergeOptions); } }); } @@ -138,44 +138,44 @@ export default class GeomanMap extends Class { // check if switched the resizeable mode for CircleMarker while drawing let reenableCircleMarker = false; if ( - this.map.pm.Draw.CircleMarker.enabled() && - !!this.map.pm.Draw.CircleMarker.options.resizeableCircleMarker !== + this.map.geoman.Draw.CircleMarker.enabled() && + !!this.map.geoman.Draw.CircleMarker.options.resizeableCircleMarker !== !!options.resizeableCircleMarker ) { - this.map.pm.Draw.CircleMarker.disable(); + this.map.geoman.Draw.CircleMarker.disable(); reenableCircleMarker = true; } // check if switched the resizeable mode for Circle while drawing let reenableCircle = false; if ( - this.map.pm.Draw.Circle.enabled() && - !!this.map.pm.Draw.Circle.options.resizeableCircle !== + this.map.geoman.Draw.Circle.enabled() && + !!this.map.geoman.Draw.Circle.options.resizeableCircle !== !!options.resizeableCircle ) { - this.map.pm.Draw.Circle.disable(); + this.map.geoman.Draw.Circle.disable(); reenableCircle = true; } // enable options for Drawing Shapes - this.map.pm.Draw.shapes.forEach((shape) => { - this.map.pm.Draw[shape].setOptions(options); + this.map.geoman.Draw.shapes.forEach((shape) => { + this.map.geoman.Draw[shape].setOptions(options); }); if (reenableCircleMarker) { - this.map.pm.Draw.CircleMarker.enable(); + this.map.geoman.Draw.CircleMarker.enable(); } if (reenableCircle) { - this.map.pm.Draw.Circle.enable(); + this.map.geoman.Draw.Circle.enable(); } // enable options for Editing const layers = Utils.findLayers(this.map); layers.forEach((layer) => { - layer.pm.setOptions(options); + layer.geoman.setOptions(options); }); - this.map.fire('pm:globaloptionschanged'); + this.map.fire('geoman:globaloptionschanged'); // store options this.globalOptions = options; @@ -187,8 +187,8 @@ export default class GeomanMap extends Class { applyGlobalOptions() { const layers = Utils.findLayers(this.map); layers.forEach((layer) => { - if (layer.pm.enabled()) { - layer.pm.applyOptions(); + if (layer.geoman.enabled()) { + layer.geoman.applyOptions(); } }); } @@ -219,7 +219,7 @@ export default class GeomanMap extends Class { return layers; } const group = new FeatureGroup(); - group._pmTempLayer = true; + group._geomanTempLayer = true; layers.forEach((layer) => { group.addLayer(layer); }); @@ -234,7 +234,7 @@ export default class GeomanMap extends Class { return layers; } const group = new FeatureGroup(); - group._pmTempLayer = true; + group._geomanTempLayer = true; layers.forEach((layer) => { group.addLayer(layer); }); diff --git a/src/js/L.PM.Utils.js b/src/js/GeomanUtils.js similarity index 89% rename from src/js/L.PM.Utils.js rename to src/js/GeomanUtils.js index 25d7f721..cbdcf2eb 100644 --- a/src/js/L.PM.Utils.js +++ b/src/js/GeomanUtils.js @@ -10,7 +10,7 @@ import { } from 'leaflet'; import { createGeodesicPolygon, getTranslation } from './helpers'; import { _toLatLng, _toPoint } from './helpers/ModeHelper'; -import Geoman from './L.PM'; +import Geoman from './Geoman'; const Utils = { calcMiddleLatLng(map, latlng1, latlng2) { @@ -36,16 +36,16 @@ const Utils = { }); // filter out layers that don't have the leaflet-geoman instance - layers = layers.filter((layer) => !!layer.pm); + layers = layers.filter((layer) => !!layer.geoman); // filter out everything that's leaflet-geoman specific temporary stuff - layers = layers.filter((layer) => !layer._pmTempLayer); + layers = layers.filter((layer) => !layer._geomanTempLayer); // filter out everything that ignore leaflet-geoman layers = layers.filter( (layer) => - (!Geoman.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) - (Geoman.optIn && layer.options.pmIgnore === false) // if optIn is true and pmIgnore is false); + (!Geoman.optIn && !layer.options.geomanIgnore) || // if optIn is not set / true and geomanIgnore is not set / true (default) + (Geoman.optIn && layer.options.geomanIgnore === false) // if optIn is true and geomanIgnore is false); ); return layers; @@ -100,12 +100,12 @@ const Utils = { // check if the last group fetch is under 1 sec, then we use the groups from before if ( - !layer._pmLastGroupFetch || - !layer._pmLastGroupFetch.time || - new Date().getTime() - layer._pmLastGroupFetch.time > 1000 + !layer._geomanLastGroupFetch || + !layer._geomanLastGroupFetch.time || + new Date().getTime() - layer._geomanLastGroupFetch.time > 1000 ) { loopThroughParents(layer); - layer._pmLastGroupFetch = { + layer._geomanLastGroupFetch = { time: new Date().getTime(), groups, groupIds, @@ -116,8 +116,8 @@ const Utils = { }; } return { - groups: layer._pmLastGroupFetch.groups, - groupIds: layer._pmLastGroupFetch.groupIds, + groups: layer._geomanLastGroupFetch.groups, + groupIds: layer._geomanLastGroupFetch.groupIds, }; }, createGeodesicPolygon, diff --git a/src/js/L.PM.js b/src/js/L.PM.js deleted file mode 100644 index af66af95..00000000 --- a/src/js/L.PM.js +++ /dev/null @@ -1,281 +0,0 @@ -/* A Leaflet Plugin For Editing Geometry Layers in Leaflet 1.0 - * Copyright (C) Geoman.io and Sumit Kumar - All Rights Reserved - * Unauthorized copying of this file, via any medium is strictly prohibited - * Proprietary and confidential - * Written by Sumit Kumar , January 2020 - * Twitter: @TweetsOfSumit - * OSS Repo: https://github.com/geoman-io/leaflet-geoman - * Get Pro: https://geoman.io - */ - -import { - Canvas, - Circle, - CircleMarker, - DomEvent, - ImageOverlay, - LayerGroup, - LeafletMap, - Marker, - Polygon, - Polyline, - Rectangle, -} from 'leaflet'; - -import packageInfo from '../../package.json'; - -import GeomanMap from './L.PM.Map'; -import Toolbar from './Toolbar/L.PM.Toolbar'; - -import Draw from './Draw/L.PM.Draw'; -import GeomanDrawCircleMarker from './Draw/L.PM.Draw.CircleMarker'; -import GeomanDrawCircle from './Draw/L.PM.Draw.Circle'; -import GeomanDrawPolyline from './Draw/L.PM.Draw.Polyline'; -import GeomanDrawMarker from './Draw/L.PM.Draw.Marker'; -import GeomanDrawPolygon from './Draw/L.PM.Draw.Polygon'; -import GeomanDrawRectangle from './Draw/L.PM.Draw.Rectangle'; -import GeomanCut from './Draw/L.PM.Draw.Cut'; -import GeomanDrawText from './Draw/L.PM.Draw.Text'; - -Draw.CircleMarker = GeomanDrawCircleMarker; -Draw.Circle = GeomanDrawCircle; -Draw.Polyline = GeomanDrawPolyline; -Draw.Marker = GeomanDrawMarker; -Draw.Polygon = GeomanDrawPolygon; -Draw.Rectangle = GeomanDrawRectangle; -Draw.Cut = GeomanCut; -Draw.Text = GeomanDrawText; - -import Edit from './Edit/L.PM.Edit'; -import GeomanEditCircleMarker from './Edit/L.PM.Edit.CircleMarker'; -import GeomanEditCircle from './Edit/L.PM.Edit.Circle'; -import GeomanEditImageOverlay from './Edit/L.PM.Edit.ImageOverlay'; -import GeomanEditLayerGroup from './Edit/L.PM.Edit.LayerGroup'; -import GeomanEditPolyline from './Edit/L.PM.Edit.Polyline'; -import GeomanEditMarker from './Edit/L.PM.Edit.Marker'; -import GeomanEditPolygon from './Edit/L.PM.Edit.Polygon'; -import GeomanEditRectangle from './Edit/L.PM.Edit.Rectangle'; -import GeomanEditText from './Edit/L.PM.Edit.Text'; - -Edit.CircleMarker = GeomanEditCircleMarker; -Edit.Circle = GeomanEditCircle; -Edit.ImageOverlay = GeomanEditImageOverlay; -Edit.LayerGroup = GeomanEditLayerGroup; -Edit.Polyline = GeomanEditPolyline; -Edit.Marker = GeomanEditMarker; -Edit.Polygon = GeomanEditPolygon; -Edit.Rectangle = GeomanEditRectangle; -Edit.Text = GeomanEditText; - -import '../css/controls.css'; -import '../css/layers.css'; - -import Matrix from './helpers/Matrix'; -import * as helpers from './helpers'; - -import Utils from './L.PM.Utils'; - -const Geoman = { - version: packageInfo.version, - Map: GeomanMap, - Toolbar, - Draw, - Edit, - Utils, - Matrix, - helpers, - activeLang: 'en', - optIn: false, - initialize(options) { - this.addInitHooks(options); - }, - setOptIn(value) { - this.optIn = !!value; - }, - addInitHooks() { - function initMap() { - this.pm = undefined; - - if (Geoman.optIn) { - if (this.options.pmIgnore === false) { - this.pm = new GeomanMap(this); - } - } else if (!this.options.pmIgnore) { - this.pm = new GeomanMap(this); - } - - if (this.pm) { - this.pm.setGlobalOptions({}); - } - } - - LeafletMap.addInitHook(initMap); - - function initLayerGroup() { - this.pm = undefined; - if (Geoman.optIn) { - if (this.options.pmIgnore === false) { - this.pm = new Edit.LayerGroup(this); - } - } else if (!this.options.pmIgnore) { - this.pm = new Edit.LayerGroup(this); - } - } - - LayerGroup.addInitHook(initLayerGroup); - - function initMarker() { - this.pm = undefined; - - if (Geoman.optIn) { - if (this.options.pmIgnore === false) { - if (this.options.textMarker) { - this.pm = new Edit.Text(this); - if (!this.options._textMarkerOverPM) { - this.pm._initTextMarker(); - } - delete this.options._textMarkerOverPM; - } else { - this.pm = new Edit.Marker(this); - } - } - } else if (!this.options.pmIgnore) { - if (this.options.textMarker) { - this.pm = new Edit.Text(this); - if (!this.options._textMarkerOverPM) { - this.pm._initTextMarker(); - } - delete this.options._textMarkerOverPM; - } else { - this.pm = new Edit.Marker(this); - } - } - } - Marker.addInitHook(initMarker); - - function initCircleMarker() { - this.pm = undefined; - - if (Geoman.optIn) { - if (this.options.pmIgnore === false) { - this.pm = new Edit.CircleMarker(this); - } - } else if (!this.options.pmIgnore) { - this.pm = new Edit.CircleMarker(this); - } - } - CircleMarker.addInitHook(initCircleMarker); - - function initPolyline() { - this.pm = undefined; - - if (Geoman.optIn) { - if (this.options.pmIgnore === false) { - this.pm = new Edit.Polyline(this); - } - } else if (!this.options.pmIgnore) { - this.pm = new Edit.Polyline(this); - } - } - - Polyline.addInitHook(initPolyline); - - function initPolygon() { - this.pm = undefined; - - if (Geoman.optIn) { - if (this.options.pmIgnore === false) { - this.pm = new Edit.Polygon(this); - } - } else if (!this.options.pmIgnore) { - this.pm = new Edit.Polygon(this); - } - } - - Polygon.addInitHook(initPolygon); - - function initRectangle() { - this.pm = undefined; - - if (Geoman.optIn) { - if (this.options.pmIgnore === false) { - this.pm = new Edit.Rectangle(this); - } - } else if (!this.options.pmIgnore) { - this.pm = new Edit.Rectangle(this); - } - } - - Rectangle.addInitHook(initRectangle); - - function initCircle() { - this.pm = undefined; - - if (Geoman.optIn) { - if (this.options.pmIgnore === false) { - this.pm = new Edit.Circle(this); - } - } else if (!this.options.pmIgnore) { - this.pm = new Edit.Circle(this); - } - } - - Circle.addInitHook(initCircle); - - function initImageOverlay() { - this.pm = undefined; - - if (Geoman.optIn) { - if (this.options.pmIgnore === false) { - this.pm = new Edit.ImageOverlay(this); - } - } else if (!this.options.pmIgnore) { - this.pm = new Edit.ImageOverlay(this); - } - } - - ImageOverlay.addInitHook(initImageOverlay); - }, - reInitLayer(layer) { - if (layer instanceof LayerGroup) { - layer.eachLayer((_layer) => { - this.reInitLayer(_layer); - }); - } - if (layer.pm) { - // PM is already added to the layer - } else if (Geoman.optIn && layer.options.pmIgnore !== false) { - // Opt-In is true and pmIgnore is not false - } else if (layer.options.pmIgnore) { - // pmIgnore is true - } else if (layer instanceof LeafletMap) { - layer.pm = new Geoman.Map(layer); - } else if (layer instanceof Marker) { - if (layer.options.textMarker) { - layer.pm = new Edit.Text(layer); - layer.pm._initTextMarker(); - layer.pm._createTextMarker(false); - } else { - layer.pm = new Edit.Marker(layer); - } - } else if (layer instanceof Circle) { - layer.pm = new Edit.Circle(layer); - } else if (layer instanceof CircleMarker) { - layer.pm = new Edit.CircleMarker(layer); - } else if (layer instanceof Rectangle) { - layer.pm = new Edit.Rectangle(layer); - } else if (layer instanceof Polygon) { - layer.pm = new Edit.Polygon(layer); - } else if (layer instanceof Polyline) { - layer.pm = new Edit.Polyline(layer); - } else if (layer instanceof LayerGroup) { - layer.pm = new Edit.LayerGroup(layer); - } else if (layer instanceof ImageOverlay) { - layer.pm = new Edit.ImageOverlay(layer); - } - }, -}; - -// initialize leaflet-geoman -// L.PM.initialize(); -export default Geoman; diff --git a/src/js/Mixins/Dragging.js b/src/js/Mixins/Dragging.js index ad7a2b86..fce710b3 100644 --- a/src/js/Mixins/Dragging.js +++ b/src/js/Mixins/Dragging.js @@ -134,13 +134,13 @@ const DragMixin = { } if (this.options.snappable && !fromLayerSync && !layersToSyncFound) { - if (!this._layer.pm.options[_editableOption]) { + if (!this._layer.geoman.options[_editableOption]) { this._initSnappableMarkersDrag(); } - } else if (this._layer.pm.options[_editableOption]) { - this._layer.pm._disableSnapping(); + } else if (this._layer.geoman.options[_editableOption]) { + this._layer.geoman._disableSnapping(); } else { - this._layer.pm._disableSnappingDrag(); + this._layer.geoman._disableSnappingDrag(); } } @@ -182,7 +182,7 @@ const DragMixin = { this._map.dragging.disable(); } - // fire pm:dragstart event + // fire geoman:dragstart event this._fireDragStart(); } @@ -195,7 +195,7 @@ const DragMixin = { // update the hidden circle border after dragging if (this._layer instanceof CircleMarker) { - this._layer.pm._updateHiddenPolyCircle(); + this._layer.geoman._updateHiddenPolyCircle(); } }, _dragMixinOnPointerUp(e) { @@ -223,7 +223,7 @@ const DragMixin = { // update the hidden circle border after dragging if (this._layer instanceof CircleMarker) { - this._layer.pm._updateHiddenPolyCircle(); + this._layer.geoman._updateHiddenPolyCircle(); } this._layerDragged = true; @@ -238,7 +238,7 @@ const DragMixin = { el.classList.remove('leaflet-geoman-dragging'); } - // fire pm:dragend event + // fire geoman:dragend event this._fireDragEnd(); // fire edit @@ -325,7 +325,7 @@ const DragMixin = { this._tempDragCoord = latlng; e.layer = this._layer; - // fire pm:dragstart event + // fire geoman:dragstart event this._fireDrag(e); }, addDraggingClass() { @@ -385,7 +385,7 @@ const DragMixin = { this.options.syncLayersOnDrag.forEach((layer) => { if (layer instanceof LayerGroup) { - layersToSync = layersToSync.concat(layer.pm.getLayers(true)); + layersToSync = layersToSync.concat(layer.geoman.getLayers(true)); } }); } else if (this.options.syncLayersOnDrag === true) { @@ -393,8 +393,8 @@ const DragMixin = { if (this._parentLayerGroup) { for (const key in this._parentLayerGroup) { const lg = this._parentLayerGroup[key]; - if (lg.pm) { - layersToSync = lg.pm.getLayers(true); + if (lg.geoman) { + layersToSync = lg.geoman.getLayers(true); } } } @@ -403,12 +403,12 @@ const DragMixin = { if (Array.isArray(layersToSync) && layersToSync.length > 0) { // filter out layers that don't have leaflet-geoman and not allowed to drag layersToSync = layersToSync - .filter((layer) => !!layer.pm) - .filter((layer) => !!layer.pm.options.draggable); + .filter((layer) => !!layer.geoman) + .filter((layer) => !!layer.geoman.options.draggable); layersToSync.forEach((layer) => { - if (layer !== this._layer && layer.pm[fnc]) { + if (layer !== this._layer && layer.geoman[fnc]) { layer._snapped = false; - layer.pm[fnc](e); + layer.geoman[fnc](e); } }); } diff --git a/src/js/Mixins/Events.js b/src/js/Mixins/Events.js index 79dc977f..fcc3240b 100644 --- a/src/js/Mixins/Events.js +++ b/src/js/Mixins/Events.js @@ -1,5 +1,5 @@ import merge from 'lodash/merge'; -import Utils from '../L.PM.Utils'; +import Utils from '../GeomanUtils'; const EventMixin = { // Draw Events @@ -7,7 +7,7 @@ const EventMixin = { _fireDrawStart(source = 'Draw', customPayload = {}) { this.__fire( this._map, - 'pm:drawstart', + 'geoman:drawstart', { shape: this._shape, workingLayer: this._layer, @@ -20,7 +20,7 @@ const EventMixin = { _fireDrawEnd(source = 'Draw', customPayload = {}) { this.__fire( this._map, - 'pm:drawend', + 'geoman:drawend', { shape: this._shape, }, @@ -32,7 +32,7 @@ const EventMixin = { _fireCreate(layer, source = 'Draw', customPayload = {}) { this.__fire( this._map, - 'pm:create', + 'geoman:create', { shape: this._shape, layer, @@ -49,7 +49,7 @@ const EventMixin = { this.__fire( this._layer, - 'pm:centerplaced', + 'geoman:centerplaced', { shape: this._shape, workingLayer, @@ -61,7 +61,7 @@ const EventMixin = { ); }, // Fired when layer is cutted - // TODO: is Cut "Draw" or "Edit"? The event `pm:edit` in the same scope is called as source "Edit" + // TODO: is Cut "Draw" or "Edit"? The event `geoman:edit` in the same scope is called as source "Edit" _fireCut( fireLayer, layer, @@ -71,7 +71,7 @@ const EventMixin = { ) { this.__fire( fireLayer, - 'pm:cut', + 'geoman:cut', { shape: this._shape, layer, @@ -87,7 +87,7 @@ const EventMixin = { _fireEdit(fireLayer = this._layer, source = 'Edit', customPayload = {}) { this.__fire( fireLayer, - 'pm:edit', + 'geoman:edit', { layer: this._layer, shape: this.getShape() }, source, customPayload @@ -97,7 +97,7 @@ const EventMixin = { _fireEnable(source = 'Edit', customPayload = {}) { this.__fire( this._layer, - 'pm:enable', + 'geoman:enable', { layer: this._layer, shape: this.getShape() }, source, customPayload @@ -107,7 +107,7 @@ const EventMixin = { _fireDisable(source = 'Edit', customPayload = {}) { this.__fire( this._layer, - 'pm:disable', + 'geoman:disable', { layer: this._layer, shape: this.getShape() }, source, customPayload @@ -117,7 +117,7 @@ const EventMixin = { _fireUpdate(source = 'Edit', customPayload = {}) { this.__fire( this._layer, - 'pm:update', + 'geoman:update', { layer: this._layer, shape: this.getShape() }, source, customPayload @@ -133,7 +133,7 @@ const EventMixin = { ) { this.__fire( this._layer, - 'pm:vertexdragstart', + 'geoman:vertexdragstart', { layer: this._layer, markerEvent: e, @@ -154,7 +154,7 @@ const EventMixin = { ) { this.__fire( this._layer, - 'pm:vertexdrag', + 'geoman:vertexdrag', { layer: this._layer, markerEvent: e, @@ -176,7 +176,7 @@ const EventMixin = { ) { this.__fire( this._layer, - 'pm:vertexdragend', + 'geoman:vertexdragend', { layer: this._layer, markerEvent: e, @@ -192,7 +192,7 @@ const EventMixin = { _fireDragStart(source = 'Edit', customPayload = {}) { this.__fire( this._layer, - 'pm:dragstart', + 'geoman:dragstart', { layer: this._layer, shape: this.getShape(), @@ -205,7 +205,7 @@ const EventMixin = { _fireDrag(e, source = 'Edit', customPayload = {}) { this.__fire( this._layer, - 'pm:drag', + 'geoman:drag', { ...e, shape: this.getShape() }, source, customPayload @@ -215,7 +215,7 @@ const EventMixin = { _fireDragEnd(source = 'Edit', customPayload = {}) { this.__fire( this._layer, - 'pm:dragend', + 'geoman:dragend', { layer: this._layer, shape: this.getShape(), @@ -228,7 +228,7 @@ const EventMixin = { _fireDragEnable(source = 'Edit', customPayload = {}) { this.__fire( this._layer, - 'pm:dragenable', + 'geoman:dragenable', { layer: this._layer, shape: this.getShape() }, source, customPayload @@ -238,7 +238,7 @@ const EventMixin = { _fireDragDisable(source = 'Edit', customPayload = {}) { this.__fire( this._layer, - 'pm:dragdisable', + 'geoman:dragdisable', { layer: this._layer, shape: this.getShape() }, source, customPayload @@ -253,7 +253,7 @@ const EventMixin = { ) { this.__fire( fireLayer, - 'pm:remove', + 'geoman:remove', { layer: refLayer, shape: this.getShape() }, source, customPayload @@ -269,7 +269,7 @@ const EventMixin = { ) { this.__fire( this._layer, - 'pm:vertexadded', + 'geoman:vertexadded', { layer: this._layer, workingLayer: this._layer, @@ -286,7 +286,7 @@ const EventMixin = { _fireVertexRemoved(marker, indexPath, source = 'Edit', customPayload = {}) { this.__fire( this._layer, - 'pm:vertexremoved', + 'geoman:vertexremoved', { layer: this._layer, marker, @@ -302,7 +302,7 @@ const EventMixin = { _fireVertexClick(e, indexPath, source = 'Edit', customPayload = {}) { this.__fire( this._layer, - 'pm:vertexclick', + 'geoman:vertexclick', { layer: this._layer, markerEvent: e, @@ -322,7 +322,7 @@ const EventMixin = { ) { this.__fire( fireLayer, - 'pm:intersect', + 'geoman:intersect', { layer: this._layer, intersection, @@ -336,7 +336,7 @@ const EventMixin = { _fireLayerReset(e, indexPath, source = 'Edit', customPayload = {}) { this.__fire( this._layer, - 'pm:layerreset', + 'geoman:layerreset', { layer: this._layer, markerEvent: e, @@ -352,7 +352,7 @@ const EventMixin = { _fireChange(latlngs, source = 'Edit', customPayload = {}) { this.__fire( this._layer, - 'pm:change', + 'geoman:change', { layer: this._layer, latlngs, @@ -367,7 +367,7 @@ const EventMixin = { _fireTextChange(text, source = 'Edit', customPayload = {}) { this.__fire( this._layer, - 'pm:textchange', + 'geoman:textchange', { layer: this._layer, text, @@ -382,7 +382,7 @@ const EventMixin = { _fireTextFocus(source = 'Edit', customPayload = {}) { this.__fire( this._layer, - 'pm:textfocus', + 'geoman:textfocus', { layer: this._layer, shape: this.getShape(), @@ -395,7 +395,7 @@ const EventMixin = { _fireTextBlur(source = 'Edit', customPayload = {}) { this.__fire( this._layer, - 'pm:textblur', + 'geoman:textblur', { layer: this._layer, shape: this.getShape(), @@ -408,15 +408,15 @@ const EventMixin = { // Snapping Events // Fired during a marker move/drag and other layers are existing _fireSnapDrag(fireLayer, eventInfo, source = 'Snapping', customPayload = {}) { - this.__fire(fireLayer, 'pm:snapdrag', eventInfo, source, customPayload); + this.__fire(fireLayer, 'geoman:snapdrag', eventInfo, source, customPayload); }, // Fired when a vertex is snapped _fireSnap(fireLayer, eventInfo, source = 'Snapping', customPayload = {}) { - this.__fire(fireLayer, 'pm:snap', eventInfo, source, customPayload); + this.__fire(fireLayer, 'geoman:snap', eventInfo, source, customPayload); }, // Fired when a vertex is unsnapped _fireUnsnap(fireLayer, eventInfo, source = 'Snapping', customPayload = {}) { - this.__fire(fireLayer, 'pm:unsnap', eventInfo, source, customPayload); + this.__fire(fireLayer, 'geoman:unsnap', eventInfo, source, customPayload); }, // Rotation Events @@ -429,7 +429,7 @@ const EventMixin = { ) { this.__fire( fireLayer, - 'pm:rotateenable', + 'geoman:rotateenable', { layer: this._layer, helpLayer: this._rotatePoly, @@ -443,7 +443,7 @@ const EventMixin = { _fireRotationDisable(fireLayer, source = 'Rotation', customPayload = {}) { this.__fire( fireLayer, - 'pm:rotatedisable', + 'geoman:rotatedisable', { layer: this._layer, shape: this.getShape(), @@ -461,7 +461,7 @@ const EventMixin = { ) { this.__fire( fireLayer, - 'pm:rotatestart', + 'geoman:rotatestart', { layer: this._rotationLayer, helpLayer: this._layer, @@ -483,12 +483,12 @@ const EventMixin = { ) { this.__fire( fireLayer, - 'pm:rotate', + 'geoman:rotate', { layer: rotationLayer, helpLayer: this._layer, startAngle: this._startAngle, - angle: rotationLayer.pm.getAngle(), + angle: rotationLayer.geoman.getAngle(), angleDiff, oldLatLngs, newLatLngs: rotationLayer.getLatLngs(), @@ -507,12 +507,12 @@ const EventMixin = { ) { this.__fire( fireLayer, - 'pm:rotateend', + 'geoman:rotateend', { layer: this._rotationLayer, helpLayer: this._layer, startAngle, - angle: this._rotationLayer.pm.getAngle(), + angle: this._rotationLayer.geoman.getAngle(), originLatLngs, newLatLngs: this._rotationLayer.getLatLngs(), }, @@ -533,7 +533,7 @@ const EventMixin = { // this._map is used because this is fired from Controls (GeomanControl) this.__fire( this._map, - 'pm:actionclick', + 'geoman:actionclick', { text: action.text, action, @@ -549,7 +549,7 @@ const EventMixin = { // this._map is used because this is fired from Controls (GeomanControl) this.__fire( this._map, - 'pm:buttonclick', + 'geoman:buttonclick', { btnName, button }, source, customPayload @@ -566,7 +566,7 @@ const EventMixin = { ) { this.__fire( this.map, - 'pm:langchange', + 'geoman:langchange', { oldLang, activeLang, @@ -581,7 +581,7 @@ const EventMixin = { _fireGlobalDragModeToggled(enabled, source = 'Global', customPayload = {}) { this.__fire( this.map, - 'pm:globaldragmodetoggled', + 'geoman:globaldragmodetoggled', { enabled, map: this.map, @@ -594,7 +594,7 @@ const EventMixin = { _fireGlobalEditModeToggled(enabled, source = 'Global', customPayload = {}) { this.__fire( this.map, - 'pm:globaleditmodetoggled', + 'geoman:globaleditmodetoggled', { enabled, map: this.map, @@ -611,7 +611,7 @@ const EventMixin = { ) { this.__fire( this.map, - 'pm:globalremovalmodetoggled', + 'geoman:globalremovalmodetoggled', { enabled, map: this.map, @@ -624,7 +624,7 @@ const EventMixin = { _fireGlobalCutModeToggled(source = 'Global', customPayload = {}) { this.__fire( this._map, - 'pm:globalcutmodetoggled', + 'geoman:globalcutmodetoggled', { enabled: !!this._enabled, map: this._map, @@ -637,7 +637,7 @@ const EventMixin = { _fireGlobalDrawModeToggled(source = 'Global', customPayload = {}) { this.__fire( this._map, - 'pm:globaldrawmodetoggled', + 'geoman:globaldrawmodetoggled', { enabled: this._enabled, shape: this._shape, @@ -651,7 +651,7 @@ const EventMixin = { _fireGlobalRotateModeToggled(source = 'Global', customPayload = {}) { this.__fire( this.map, - 'pm:globalrotatemodetoggled', + 'geoman:globalrotatemodetoggled', { enabled: this.globalRotateModeEnabled(), map: this.map, @@ -669,7 +669,7 @@ const EventMixin = { ) { this.__fire( fireLayer, - 'pm:remove', + 'geoman:remove', { layer: refLayer, shape: undefined }, source, customPayload @@ -685,7 +685,7 @@ const EventMixin = { ) { this.__fire( this.map, - 'pm:keyevent', + 'geoman:keyevent', { event, eventType, diff --git a/src/js/Mixins/Keyboard.js b/src/js/Mixins/Keyboard.js index 6b4bf115..3b052448 100644 --- a/src/js/Mixins/Keyboard.js +++ b/src/js/Mixins/Keyboard.js @@ -29,7 +29,7 @@ const createKeyboardMixins = () => ({ this._lastEvents[e.type] = data; this._lastEvents.current = data; - this.map.pm._fireKeyeventEvent(e, e.type, focusOn); + this.map.geoman._fireKeyeventEvent(e, e.type, focusOn); }, _onBlur(e) { e.altKey = false; diff --git a/src/js/Mixins/MarkerLimits.js b/src/js/Mixins/MarkerLimits.js index 6aaf63f5..9831d63a 100644 --- a/src/js/Mixins/MarkerLimits.js +++ b/src/js/Mixins/MarkerLimits.js @@ -7,7 +7,7 @@ const MarkerLimits = { this.createCache(); // refresh cache when layer was edited (e.g. when a vertex was added or removed) - this._layer.on('pm:edit', this.createCache, this); + this._layer.on('geoman:edit', this.createCache, this); // apply filter for the first time this.applyLimitFilters({}); @@ -21,23 +21,23 @@ const MarkerLimits = { } // remove events when edit mode is disabled - this._layer.on('pm:disable', this._removeMarkerLimitEvents, this); + this._layer.on('geoman:disable', this._removeMarkerLimitEvents, this); this._layer.on('remove', this._removeMarkerLimitEvents, this); // add markers closest to the pointer if (this.options.limitMarkersToCount > -1) { // re-init markers when a vertex is removed. // The reason is that syncing this cache with a removed marker was impossible to do - this._layer.on('pm:vertexremoved', this._initMarkers, this); + this._layer.on('geoman:vertexremoved', this._initMarkers, this); this._map.on('pointermove', this.throttledApplyLimitFilters, this); } }, _removeMarkerLimitEvents() { this._map.off('pointermove', this.throttledApplyLimitFilters, this); - this._layer.off('pm:edit', this.createCache, this); - this._layer.off('pm:disable', this._removeMarkerLimitEvents, this); - this._layer.off('pm:vertexremoved', this._initMarkers, this); + this._layer.off('geoman:edit', this.createCache, this); + this._layer.off('geoman:disable', this._removeMarkerLimitEvents, this); + this._layer.off('geoman:vertexremoved', this._initMarkers, this); }, createCache() { const allMarkers = [...this._markerGroup.getLayers(), ...this.markerCache]; diff --git a/src/js/Mixins/Modes/Mode.Drag.js b/src/js/Mixins/Modes/Mode.Drag.js index 39bae431..dcd6341c 100644 --- a/src/js/Mixins/Modes/Mode.Drag.js +++ b/src/js/Mixins/Modes/Mode.Drag.js @@ -1,6 +1,6 @@ import { LayerGroup, Util } from 'leaflet'; -import Geoman from '../../L.PM'; -import Utils from '../../L.PM.Utils'; +import Geoman from '../../Geoman'; +import Utils from '../../GeomanUtils'; const GlobalDragMode = { _globalDragModeEnabled: false, @@ -12,7 +12,7 @@ const GlobalDragMode = { layers.forEach((layer) => { if (this._isRelevantForDrag(layer)) { - layer.pm.enableLayerDrag(); + layer.geoman.enableLayerDrag(); } }); @@ -39,7 +39,7 @@ const GlobalDragMode = { this._globalDragModeEnabled = false; layers.forEach((layer) => { - layer.pm.disableLayerDrag(); + layer.geoman.disableLayerDrag(); }); // remove map handler @@ -69,7 +69,7 @@ const GlobalDragMode = { const layer = layers[id]; if (this._isRelevantForDrag(layer)) { - layer.pm.enableLayerDrag(); + layer.geoman.enableLayerDrag(); } } } @@ -79,12 +79,12 @@ const GlobalDragMode = { }, _isRelevantForDrag(layer) { return ( - layer.pm && + layer.geoman && !(layer instanceof LayerGroup) && - ((!Geoman.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) - (Geoman.optIn && layer.options.pmIgnore === false)) && // if optIn is true and pmIgnore is false - !layer._pmTempLayer && - layer.pm.options.draggable + ((!Geoman.optIn && !layer.options.geomanIgnore) || // if optIn is not set / true and geomanIgnore is not set / true (default) + (Geoman.optIn && layer.options.geomanIgnore === false)) && // if optIn is true and geomanIgnore is false + !layer._geomanTempLayer && + layer.geoman.options.draggable ); }, }; diff --git a/src/js/Mixins/Modes/Mode.Edit.js b/src/js/Mixins/Modes/Mode.Edit.js index 4a4ab2b2..8a54387b 100644 --- a/src/js/Mixins/Modes/Mode.Edit.js +++ b/src/js/Mixins/Modes/Mode.Edit.js @@ -1,6 +1,6 @@ import { LayerGroup, Util } from 'leaflet'; -import Geoman from '../../L.PM'; -import Utils from '../../L.PM.Utils'; +import Geoman from '../../Geoman'; +import Utils from '../../GeomanUtils'; // this mixin adds a global edit mode to the map const GlobalEditMode = { @@ -21,7 +21,7 @@ const GlobalEditMode = { // enable all layers layers.forEach((layer) => { if (this._isRelevantForEdit(layer)) { - layer.pm.enable(options); + layer.geoman.enable(options); } }); @@ -51,7 +51,7 @@ const GlobalEditMode = { // disable all layers layers.forEach((layer) => { - layer.pm.disable(); + layer.geoman.disable(); }); // cleanup layer off event @@ -87,7 +87,7 @@ const GlobalEditMode = { // enable edit for that layer if it's relevant if (this._isRelevantForEdit(layer)) { - layer.pm.enable({ ...this.globalOptions }); + layer.geoman.enable({ ...this.globalOptions }); } } } @@ -97,12 +97,12 @@ const GlobalEditMode = { }, _isRelevantForEdit(layer) { return ( - layer.pm && + layer.geoman && !(layer instanceof LayerGroup) && - ((!Geoman.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) - (Geoman.optIn && layer.options.pmIgnore === false)) && // if optIn is true and pmIgnore is false - !layer._pmTempLayer && - layer.pm.options.allowEditing + ((!Geoman.optIn && !layer.options.geomanIgnore) || // if optIn is not set / true and geomanIgnore is not set / true (default) + (Geoman.optIn && layer.options.geomanIgnore === false)) && // if optIn is true and geomanIgnore is false + !layer._geomanTempLayer && + layer.geoman.options.allowEditing ); }, }; diff --git a/src/js/Mixins/Modes/Mode.Removal.js b/src/js/Mixins/Modes/Mode.Removal.js index 11be6ac8..acee06f3 100644 --- a/src/js/Mixins/Modes/Mode.Removal.js +++ b/src/js/Mixins/Modes/Mode.Removal.js @@ -1,5 +1,5 @@ import { LayerGroup, Util } from 'leaflet'; -import Geoman from '../../L.PM'; +import Geoman from '../../Geoman'; const GlobalRemovalMode = { _globalRemovalModeEnabled: false, @@ -8,8 +8,8 @@ const GlobalRemovalMode = { // handle existing layers this.map.eachLayer((layer) => { if (this._isRelevantForRemoval(layer)) { - if (layer.pm.enabled()) { - layer.pm.disable(); + if (layer.geoman.enabled()) { + layer.geoman.disable(); } layer.on('click', this.removeLayer, this); } @@ -64,28 +64,28 @@ const GlobalRemovalMode = { // only remove layer, if it's handled by leaflet-geoman, // not a tempLayer and not currently being dragged const removeable = - this._isRelevantForRemoval(layer) && !layer.pm.dragging(); + this._isRelevantForRemoval(layer) && !layer.geoman.dragging(); if (removeable) { - layer.removeFrom(this.map.pm._getContainingLayer()); + layer.removeFrom(this.map.geoman._getContainingLayer()); layer.remove(); if (layer instanceof LayerGroup) { this._fireRemoveLayerGroup(layer); this._fireRemoveLayerGroup(this.map, layer); } else { - layer.pm._fireRemove(layer); - layer.pm._fireRemove(this.map, layer); + layer.geoman._fireRemove(layer); + layer.geoman._fireRemove(this.map, layer); } } }, _isRelevantForRemoval(layer) { return ( - layer.pm && + layer.geoman && !(layer instanceof LayerGroup) && - ((!Geoman.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) - (Geoman.optIn && layer.options.pmIgnore === false)) && // if optIn is true and pmIgnore is false - !layer._pmTempLayer && - layer.pm.options.allowRemoval + ((!Geoman.optIn && !layer.options.geomanIgnore) || // if optIn is not set / true and geomanIgnore is not set / true (default) + (Geoman.optIn && layer.options.geomanIgnore === false)) && // if optIn is true and geomanIgnore is false + !layer._geomanTempLayer && + layer.geoman.options.allowRemoval ); }, handleLayerAdditionInGlobalRemovalMode() { @@ -95,8 +95,8 @@ const GlobalRemovalMode = { for (const id in layers) { const layer = layers[id]; if (this._isRelevantForRemoval(layer)) { - if (layer.pm.enabled()) { - layer.pm.disable(); + if (layer.geoman.enabled()) { + layer.geoman.disable(); } layer.on('click', this.removeLayer, this); } diff --git a/src/js/Mixins/Modes/Mode.Rotate.js b/src/js/Mixins/Modes/Mode.Rotate.js index 871af302..5c5c86bd 100644 --- a/src/js/Mixins/Modes/Mode.Rotate.js +++ b/src/js/Mixins/Modes/Mode.Rotate.js @@ -1,6 +1,6 @@ import { LayerGroup, Polyline, Util } from 'leaflet'; -import Geoman from '../../L.PM'; -import Utils from '../../L.PM.Utils'; +import Geoman from '../../Geoman'; +import Utils from '../../GeomanUtils'; const GlobalRotateMode = { _globalRotateModeEnabled: false, @@ -11,7 +11,7 @@ const GlobalRotateMode = { ); layers.forEach((layer) => { if (this._isRelevantForRotate(layer)) { - layer.pm.enableRotate(); + layer.geoman.enableRotate(); } }); @@ -38,7 +38,7 @@ const GlobalRotateMode = { (l) => l instanceof Polyline ); layers.forEach((layer) => { - layer.pm.disableRotate(); + layer.geoman.disableRotate(); }); // remove map handler @@ -61,13 +61,13 @@ const GlobalRotateMode = { }, _isRelevantForRotate(layer) { return ( - layer.pm && + layer.geoman && layer instanceof Polyline && !(layer instanceof LayerGroup) && - ((!Geoman.optIn && !layer.options.pmIgnore) || // if optIn is not set / true and pmIgnore is not set / true (default) - (Geoman.optIn && layer.options.pmIgnore === false)) && // if optIn is true and pmIgnore is false - !layer._pmTempLayer && - layer.pm.options.allowRotation + ((!Geoman.optIn && !layer.options.geomanIgnore) || // if optIn is not set / true and geomanIgnore is not set / true (default) + (Geoman.optIn && layer.options.geomanIgnore === false)) && // if optIn is true and geomanIgnore is false + !layer._geomanTempLayer && + layer.geoman.options.allowRotation ); }, handleLayerAdditionInGlobalRotateMode() { @@ -77,7 +77,7 @@ const GlobalRotateMode = { for (const id in layers) { const layer = layers[id]; if (this._isRelevantForRemoval(layer)) { - layer.pm.enableRotate(); + layer.geoman.enableRotate(); } } } diff --git a/src/js/Mixins/Rotating.js b/src/js/Mixins/Rotating.js index 2b7f37df..eafc4a47 100644 --- a/src/js/Mixins/Rotating.js +++ b/src/js/Mixins/Rotating.js @@ -24,7 +24,7 @@ const RotateMixin = { const originLatLngs = copyLatLngs( this._rotationLayer, - this._rotationLayer.pm._rotateOrgLatLng + this._rotationLayer.geoman._rotateOrgLatLng ); this._fireRotationStart(this._rotationLayer, originLatLngs); @@ -74,7 +74,7 @@ const RotateMixin = { this._rotationLayer.setLatLngs( this._rotateLayer( angleDiffRadiant, - this._rotationLayer.pm._rotateOrgLatLng, + this._rotationLayer.geoman._rotateOrgLatLng, this._rotationOriginLatLng, Matrix.init(), this._map @@ -86,11 +86,11 @@ const RotateMixin = { angleDiff = angleDiff < 0 ? angleDiff + 360 : angleDiff; const angle = angleDiff + this._startAngle; this._setAngle(angle); - this._rotationLayer.pm._setAngle(angle); + this._rotationLayer.geoman._setAngle(angle); this._fireRotation(this._rotationLayer, angleDiff, oldLatLngs); this._fireRotation(this._map, angleDiff, oldLatLngs); - this._rotationLayer.pm._fireChange( + this._rotationLayer.geoman._fireChange( this._rotationLayer.getLatLngs(), 'Rotation' ); @@ -105,14 +105,16 @@ const RotateMixin = { const originLatLngs = copyLatLngs( this._rotationLayer, - this._rotationLayer.pm._rotateOrgLatLng + this._rotationLayer.geoman._rotateOrgLatLng ); // store the new latlngs - this._rotationLayer.pm._rotateOrgLatLng = copyLatLngs(this._rotationLayer); + this._rotationLayer.geoman._rotateOrgLatLng = copyLatLngs( + this._rotationLayer + ); this._fireRotationEnd(this._rotationLayer, startAngle, originLatLngs); this._fireRotationEnd(this._map, startAngle, originLatLngs); - this._rotationLayer.pm._fireEdit(this._rotationLayer, 'Rotation'); + this._rotationLayer.geoman._fireEdit(this._rotationLayer, 'Rotation'); this._preventRenderingMarkers(false); @@ -135,7 +137,7 @@ const RotateMixin = { const polygon = new Polygon(this._layer.getLatLngs(), { stroke: false, fill: false, - pmIgnore: true, + geomanIgnore: true, }).addTo(this._layer._map); const center = polygon.getCenter(); polygon.removeFrom(this._layer._map); @@ -167,29 +169,31 @@ const RotateMixin = { ); } - // We create an hidden polygon. We set pmIgnore to false, so that the `pm` property will be always create, also if OptIn == true + // We create an hidden polygon. We set geomanIgnore to false, so that the `geoman` property will be always create, also if OptIn == true const options = { fill: false, stroke: false, - pmIgnore: false, + geomanIgnore: false, snapIgnore: true, }; // we create a temp polygon for rotation this._rotatePoly = new Polygon(this._layer.getLatLngs(), options); - this._rotatePoly._pmTempLayer = true; + this._rotatePoly._geomanTempLayer = true; this._rotatePoly.addTo(this._layer._map); - this._rotatePoly.pm._setAngle(this.getAngle()); - this._rotatePoly.pm.setRotationCenter(this.getRotationCenter()); - this._rotatePoly.pm.setOptions(this._layer._map.pm.getGlobalOptions()); - this._rotatePoly.pm.setOptions({ + this._rotatePoly.geoman._setAngle(this.getAngle()); + this._rotatePoly.geoman.setRotationCenter(this.getRotationCenter()); + this._rotatePoly.geoman.setOptions( + this._layer._map.geoman.getGlobalOptions() + ); + this._rotatePoly.geoman.setOptions({ rotate: true, snappable: false, hideMiddleMarkers: true, }); // we connect the temp polygon (that will be enabled for rotation) with the current layer, so that we can rotate the current layer too - this._rotatePoly.pm._rotationLayer = this._layer; - this._rotatePoly.pm.enable(); + this._rotatePoly.geoman._rotationLayer = this._layer; + this._rotatePoly.geoman.enable(); // store the original latlngs this._rotateOrgLatLng = copyLatLngs(this._layer); @@ -204,14 +208,14 @@ const RotateMixin = { }, disableRotate() { if (this.rotateEnabled()) { - if (this._rotatePoly.pm._layerRotated) { + if (this._rotatePoly.geoman._layerRotated) { this._fireUpdate(); } - this._rotatePoly.pm._layerRotated = false; + this._rotatePoly.geoman._layerRotated = false; // delete the temp polygon - this._rotatePoly.pm.disable(); + this._rotatePoly.geoman.disable(); this._rotatePoly.remove(); - this._rotatePoly.pm.setOptions({ rotate: false }); + this._rotatePoly.geoman.setOptions({ rotate: false }); this._rotatePoly = undefined; this._rotateOrgLatLng = undefined; @@ -247,7 +251,7 @@ const RotateMixin = { if ( this.rotateEnabled() && this._rotatePoly && - this._rotatePoly.pm.enabled() + this._rotatePoly.geoman.enabled() ) { this._rotatePoly.setLatLngs( this._rotateLayer( @@ -258,7 +262,7 @@ const RotateMixin = { this._rotatePoly._map ) ); - this._rotatePoly.pm._initMarkers(); + this._rotatePoly.geoman._initMarkers(); } // TODO: for negative angle change the difference is always (360 - angle), do we want this? @@ -295,7 +299,7 @@ const RotateMixin = { this._rotationCenter = center; if (this._rotatePoly) { - this._rotatePoly.pm.setRotationCenter(center); + this._rotatePoly.geoman.setRotationCenter(center); } }, }; diff --git a/src/js/Mixins/Snapping.js b/src/js/Mixins/Snapping.js index 4da2a6bb..29f0e852 100644 --- a/src/js/Mixins/Snapping.js +++ b/src/js/Mixins/Snapping.js @@ -10,8 +10,8 @@ import { Util, } from 'leaflet'; import { hasValues, prioritiseSort } from '../helpers'; -import Geoman from '../L.PM'; -import Utils from '../L.PM.Utils'; +import Geoman from '../Geoman'; +import Utils from '../GeomanUtils'; const SnapMixin = { _initSnappableMarkers() { @@ -21,11 +21,11 @@ const SnapMixin = { this._assignEvents(this._markers); - this._layer.off('pm:dragstart', this._unsnap, this); - this._layer.on('pm:dragstart', this._unsnap, this); + this._layer.off('geoman:dragstart', this._unsnap, this); + this._layer.on('geoman:dragstart', this._unsnap, this); }, _disableSnapping() { - this._layer.off('pm:dragstart', this._unsnap, this); + this._layer.off('geoman:dragstart', this._unsnap, this); }, _assignEvents(markerArr) { // loop through marker array and assign events to the markers @@ -71,7 +71,7 @@ const SnapMixin = { }, _handleThrottleSnapping() { // we check if the throttledList is existing, else the function is deleted but the `layeradd` event calls it. - // this made problems when layer was removed and added to the map in the `pm:create` event + // this made problems when layer was removed and added to the map in the `geoman:create` event if (this.throttledList) { this._createSnapList(); } @@ -90,7 +90,10 @@ const SnapMixin = { // if snapping is disabled via holding ALT during drag, stop right here // we need to check for the altKey on the move event, because keydown event is to slow ... - if (e?.originalEvent?.altKey || this._map?.pm?.Keyboard.isAltKeyPressed()) { + if ( + e?.originalEvent?.altKey || + this._map?.geoman?.Keyboard.isAltKeyPressed() + ) { return false; } @@ -137,7 +140,7 @@ const SnapMixin = { // minimal distance before marker snaps (in pixels) const minDistance = this.options.snapDistance; - // event info for pm:snap and pm:unsnap + // event info for geoman:snap and geoman:unsnap const eventInfo = { marker, shape: this._shape, @@ -213,8 +216,8 @@ const SnapMixin = { // if snapIgnore === false the layer will be always snappable if ( layer.options.snapIgnore === undefined && - ((!Geoman.optIn && layer.options.pmIgnore === true) || // if optIn is not set and pmIgnore is true, the layer will be ignored - (Geoman.optIn && layer.options.pmIgnore !== false)) // if optIn is true and pmIgnore is not false, the layer will be ignored + ((!Geoman.optIn && layer.options.geomanIgnore === true) || // if optIn is not set and geomanIgnore is true, the layer will be ignored + (Geoman.optIn && layer.options.geomanIgnore !== false)) // if optIn is true and geomanIgnore is not false, the layer will be ignored ) { return; } @@ -222,18 +225,21 @@ const SnapMixin = { // adds a hidden polygon which matches the border of the circle if ( (layer instanceof Circle || layer instanceof CircleMarker) && - layer.pm && - layer.pm._hiddenPolyCircle + layer.geoman && + layer.geoman._hiddenPolyCircle ) { - layers.push(layer.pm._hiddenPolyCircle); + layers.push(layer.geoman._hiddenPolyCircle); } else if (layer instanceof ImageOverlay) { layer = new Rectangle(layer.getBounds()); } layers.push(layer); // this is for debugging - const debugLine = new Polyline([], { color: 'red', pmIgnore: true }); - debugLine._pmTempLayer = true; + const debugLine = new Polyline([], { + color: 'red', + geomanIgnore: true, + }); + debugLine._geomanTempLayer = true; debugIndicatorLines.push(debugLine); if (layer instanceof Circle || layer instanceof CircleMarker) { debugIndicatorLines.push(debugLine); @@ -253,14 +259,17 @@ const SnapMixin = { ); // finally remove everything that's leaflet-geoman specific temporary stuff - layers = layers.filter((layer) => !layer._pmTempLayer); + layers = layers.filter((layer) => !layer._geomanTempLayer); // save snaplist from layers and the other snap layers added from other classes/scripts if (this._otherSnapLayers) { this._otherSnapLayers.forEach(() => { // this is for debugging - const debugLine = new Polyline([], { color: 'red', pmIgnore: true }); - debugLine._pmTempLayer = true; + const debugLine = new Polyline([], { + color: 'red', + geomanIgnore: true, + }); + debugLine._geomanTempLayer = true; debugIndicatorLines.push(debugLine); }); this._snapList = layers.concat(this._otherSnapLayers); @@ -307,8 +316,11 @@ const SnapMixin = { if (this.debugIndicatorLines) { if (!this.debugIndicatorLines[index]) { - const debugLine = new Polyline([], { color: 'red', pmIgnore: true }); - debugLine._pmTempLayer = true; + const debugLine = new Polyline([], { + color: 'red', + geomanIgnore: true, + }); + debugLine._geomanTempLayer = true; this.debugIndicatorLines[index] = debugLine; } @@ -470,7 +482,7 @@ const SnapMixin = { 'Polygon', 'Rectangle', ]; - const order = this._map.pm.globalOptions.snappingOrder || []; + const order = this._map.geoman.globalOptions.snappingOrder || []; let lastIndex = 0; const prioOrder = {}; diff --git a/src/js/Toolbar/L.PM.GeomanControl.js b/src/js/Toolbar/GeomanControl.js similarity index 92% rename from src/js/Toolbar/L.PM.GeomanControl.js rename to src/js/Toolbar/GeomanControl.js index 22f87259..df0e9385 100644 --- a/src/js/Toolbar/L.PM.GeomanControl.js +++ b/src/js/Toolbar/GeomanControl.js @@ -23,18 +23,18 @@ export default class GeomanControl extends Control { onAdd(map) { this._map = map; - if (!this._map.pm.Toolbar.options.oneBlock) { + if (!this._map.geoman.Toolbar.options.oneBlock) { if (this._button.tool === 'edit') { - this._container = this._map.pm.Toolbar.editContainer; + this._container = this._map.geoman.Toolbar.editContainer; } else if (this._button.tool === 'options') { - this._container = this._map.pm.Toolbar.optionsContainer; + this._container = this._map.geoman.Toolbar.optionsContainer; } else if (this._button.tool === 'custom') { - this._container = this._map.pm.Toolbar.customContainer; + this._container = this._map.geoman.Toolbar.customContainer; } else { - this._container = this._map.pm.Toolbar.drawContainer; + this._container = this._map.geoman.Toolbar.drawContainer; } } else { - this._container = this._map.pm.Toolbar._createContainer( + this._container = this._map.geoman.Toolbar._createContainer( this.options.position ); } @@ -172,14 +172,14 @@ export default class GeomanControl extends Control { text: getTranslation('actions.removeLastVertex'), title: getTranslation('actions.removeLastVertex'), onClick() { - this._map.pm.Draw[button.jsClass]._removeLastVertex(); + this._map.geoman.Draw[button.jsClass]._removeLastVertex(); }, }, finish: { text: getTranslation('actions.finish'), title: getTranslation('actions.finish'), onClick(e) { - this._map.pm.Draw[button.jsClass]._finishShape(e); + this._map.geoman.Draw[button.jsClass]._finishShape(e); }, }, }; @@ -220,7 +220,7 @@ export default class GeomanControl extends Control { // is needed to prevent scrolling when clicking on a-element with href="a" e.preventDefault(); let btnName = ''; - const { buttons } = this._map.pm.Toolbar; + const { buttons } = this._map.geoman.Toolbar; for (const btn in buttons) { if (buttons[btn]._button === button) { btnName = btn; @@ -295,10 +295,10 @@ export default class GeomanControl extends Control { return; } if (this._button.disableOtherButtons) { - this._map.pm.Toolbar.triggerClickOnToggledButtons(this); + this._map.geoman.Toolbar.triggerClickOnToggledButtons(this); } let btnName = ''; - const { buttons } = this._map.pm.Toolbar; + const { buttons } = this._map.geoman.Toolbar; for (const btn in buttons) { if (buttons[btn]._button === this._button) { btnName = btn; diff --git a/src/js/Toolbar/L.PM.Toolbar.js b/src/js/Toolbar/GeomanToolbar.js similarity index 95% rename from src/js/Toolbar/L.PM.Toolbar.js rename to src/js/Toolbar/GeomanToolbar.js index 40c0c811..f9f95feb 100644 --- a/src/js/Toolbar/L.PM.Toolbar.js +++ b/src/js/Toolbar/GeomanToolbar.js @@ -1,4 +1,4 @@ -import GeomanControl from './L.PM.GeomanControl'; +import GeomanControl from './GeomanControl'; import { Class, DomUtil, Util } from 'leaflet'; import { getTranslation } from '../helpers'; @@ -218,7 +218,7 @@ export default class Toolbar extends Class { } _defineButtons() { - // some buttons are still in their respective classes, like L.PM.Draw.Polygon + // some buttons are still in their respective classes, like Geoman.Draw.Polygon const drawMarkerButton = { className: 'leaflet-geoman-control-icon leaflet-geoman-icon-marker', title: getTranslation('buttonTitles.drawMarkerButton'), @@ -226,7 +226,7 @@ export default class Toolbar extends Class { onClick: () => {}, afterClick: (ctx) => { // toggle drawing mode - this.map.pm.Draw[ctx.button._button.jsClass].toggle(); + this.map.geoman.Draw[ctx.button._button.jsClass].toggle(); }, doToggle: true, toggleStatus: false, @@ -242,7 +242,7 @@ export default class Toolbar extends Class { onClick: () => {}, afterClick: (ctx) => { // toggle drawing mode - this.map.pm.Draw[ctx.button._button.jsClass].toggle(); + this.map.geoman.Draw[ctx.button._button.jsClass].toggle(); }, doToggle: true, toggleStatus: false, @@ -258,7 +258,7 @@ export default class Toolbar extends Class { onClick: () => {}, afterClick: (ctx) => { // toggle drawing mode - this.map.pm.Draw[ctx.button._button.jsClass].toggle(); + this.map.geoman.Draw[ctx.button._button.jsClass].toggle(); }, doToggle: true, toggleStatus: false, @@ -274,7 +274,7 @@ export default class Toolbar extends Class { onClick: () => {}, afterClick: (ctx) => { // toggle drawing mode - this.map.pm.Draw[ctx.button._button.jsClass].toggle(); + this.map.geoman.Draw[ctx.button._button.jsClass].toggle(); }, doToggle: true, toggleStatus: false, @@ -291,7 +291,7 @@ export default class Toolbar extends Class { onClick: () => {}, afterClick: (ctx) => { // toggle drawing mode - this.map.pm.Draw[ctx.button._button.jsClass].toggle(); + this.map.geoman.Draw[ctx.button._button.jsClass].toggle(); }, doToggle: true, toggleStatus: false, @@ -307,7 +307,7 @@ export default class Toolbar extends Class { onClick: () => {}, afterClick: (ctx) => { // toggle drawing mode - this.map.pm.Draw[ctx.button._button.jsClass].toggle(); + this.map.geoman.Draw[ctx.button._button.jsClass].toggle(); }, doToggle: true, toggleStatus: false, @@ -321,7 +321,7 @@ export default class Toolbar extends Class { className: 'leaflet-geoman-control-icon leaflet-geoman-icon-edit', onClick: () => {}, afterClick: () => { - this.map.pm.toggleGlobalEditMode(); + this.map.geoman.toggleGlobalEditMode(); }, doToggle: true, toggleStatus: false, @@ -336,7 +336,7 @@ export default class Toolbar extends Class { className: 'leaflet-geoman-control-icon leaflet-geoman-icon-drag', onClick: () => {}, afterClick: () => { - this.map.pm.toggleGlobalDragMode(); + this.map.geoman.toggleGlobalDragMode(); }, doToggle: true, toggleStatus: false, @@ -353,7 +353,7 @@ export default class Toolbar extends Class { onClick: () => {}, afterClick: (ctx) => { // enable polygon drawing mode without snap - this.map.pm.Draw[ctx.button._button.jsClass].toggle({ + this.map.geoman.Draw[ctx.button._button.jsClass].toggle({ snappable: true, cursorMarker: true, allowSelfIntersection: false, @@ -372,7 +372,7 @@ export default class Toolbar extends Class { className: 'leaflet-geoman-control-icon leaflet-geoman-icon-delete', onClick: () => {}, afterClick: () => { - this.map.pm.toggleGlobalRemovalMode(); + this.map.geoman.toggleGlobalRemovalMode(); }, doToggle: true, toggleStatus: false, @@ -387,7 +387,7 @@ export default class Toolbar extends Class { className: 'leaflet-geoman-control-icon leaflet-geoman-icon-rotate', onClick: () => {}, afterClick: () => { - this.map.pm.toggleGlobalRotateMode(); + this.map.geoman.toggleGlobalRotateMode(); }, doToggle: true, toggleStatus: false, @@ -404,7 +404,7 @@ export default class Toolbar extends Class { onClick: () => {}, afterClick: (ctx) => { // toggle drawing mode - this.map.pm.Draw[ctx.button._button.jsClass].toggle(); + this.map.geoman.Draw[ctx.button._button.jsClass].toggle(); }, doToggle: true, toggleStatus: false, @@ -519,7 +519,7 @@ export default class Toolbar extends Class { if (this.buttons[options.name]) { throw new TypeError('Button with this name already exists'); } - const drawInstance = this.map.pm.Draw.createNewDrawInstance( + const drawInstance = this.map.geoman.Draw.createNewDrawInstance( options.name, instance ); @@ -676,7 +676,7 @@ export default class Toolbar extends Class { } }); - this.map.pm.Toolbar.buttons = newbtnorder; + this.map.geoman.Toolbar.buttons = newbtnorder; this._showHideButtons(); } diff --git a/src/js/helpers/Matrix.js b/src/js/helpers/Matrix.js index 6aebfe28..f41b404d 100644 --- a/src/js/helpers/Matrix.js +++ b/src/js/helpers/Matrix.js @@ -5,10 +5,9 @@ */ import { Point } from 'leaflet'; -import Geoman from '../L.PM'; /** - * @class L.PM.Matrix + * @class Matrix * * @param {Number} a * @param {Number} b @@ -24,7 +23,7 @@ const Matrix = function Matrix(a, b, c, d, e, f) { this._matrix = [a, b, c, d, e, f]; }; -Matrix.init = () => new Geoman.Matrix(1, 0, 0, 1, 0, 0); +Matrix.init = () => new Matrix(1, 0, 0, 1, 0, 0); Matrix.prototype = { /** @@ -65,11 +64,11 @@ Matrix.prototype = { }, /** - * @return {L.PM.Matrix} + * @return {Matrix} */ clone() { const matrix = this._matrix; - return new Geoman.Matrix( + return new Matrix( matrix[0], matrix[1], matrix[2], @@ -81,7 +80,7 @@ Matrix.prototype = { /** * @param {Point|Number} translate - * @return {L.PM.Matrix|Point} + * @return {Matrix|Point} */ translate(translate) { if (translate === undefined) { @@ -104,7 +103,7 @@ Matrix.prototype = { /** * @param {Point|Number} scale * @param {Point|Number} origin - * @return {L.PM.Matrix|Point} + * @return {Matrix|Point} */ scale(scale, origin) { if (scale === undefined) { @@ -137,7 +136,7 @@ Matrix.prototype = { * m10 m11 y - m10 * x - m11 * y * @param {Number} angle * @param {Point=} origin - * @return {L.PM.Matrix} + * @return {Matrix} */ rotate(angle, origin) { const cos = Math.cos(angle); @@ -157,7 +156,7 @@ Matrix.prototype = { /** * Invert rotation - * @return {L.PM.Matrix} + * @return {Matrix} */ flip() { this._matrix[1] *= -1; @@ -166,7 +165,7 @@ Matrix.prototype = { }, /** - * @param {Number|L.PM.Matrix} a + * @param {Number|Matrix} a * @param {Number} b * @param {Number} c * @param {Number} d @@ -188,7 +187,7 @@ Matrix.prototype = { ]; let val; - if (a && a instanceof Geoman.Matrix) { + if (a && a instanceof Matrix) { src = a._matrix; other = [ [src[0], src[2], src[4]], diff --git a/src/js/helpers/index.js b/src/js/helpers/index.js index 31b54801..d4947bd8 100644 --- a/src/js/helpers/index.js +++ b/src/js/helpers/index.js @@ -11,7 +11,7 @@ import { import get from 'lodash/get'; import translations from '../../assets/translations'; -import Geoman from '../L.PM'; +import Geoman from '../Geoman'; export function getTranslation(path) { const lang = Geoman.activeLang; From ba6dc17b9a0da8c9329103fea378a9f089127ec7 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 11:41:02 +0100 Subject: [PATCH 32/41] Add to private methods "_" prefix --- cypress/e2e/globalmodes.cy.js | 2 +- src/js/Draw/Draw.Cut.js | 2 +- src/js/Edit/Edit.Polyline.js | 2 +- src/js/Edit/Edit.js | 2 +- src/js/Mixins/Dragging.js | 1 - src/js/Mixins/MarkerLimits.js | 20 ++++++++++---------- src/js/Mixins/Modes/Mode.Drag.js | 4 ++-- src/js/Mixins/Modes/Mode.Edit.js | 4 ++-- src/js/Mixins/Modes/Mode.Removal.js | 12 ++++++------ src/js/Mixins/Modes/Mode.Rotate.js | 4 ++-- 10 files changed, 26 insertions(+), 27 deletions(-) diff --git a/cypress/e2e/globalmodes.cy.js b/cypress/e2e/globalmodes.cy.js index b8da0eeb..de90065a 100644 --- a/cypress/e2e/globalmodes.cy.js +++ b/cypress/e2e/globalmodes.cy.js @@ -502,7 +502,7 @@ describe('Modes', () => { setTimeout(() => { const layer = map.geoman.getGeomanLayers()[0]; expect( - layer.listens('click', map.geoman.removeLayer, map.geoman) + layer.listens('click', map.geoman._removeLayer, map.geoman) ).to.equal(true); done(); }, 100); diff --git a/src/js/Draw/Draw.Cut.js b/src/js/Draw/Draw.Cut.js index b10e74ec..2aa9f0f8 100644 --- a/src/js/Draw/Draw.Cut.js +++ b/src/js/Draw/Draw.Cut.js @@ -206,7 +206,7 @@ export default class GeomanCut extends GeomanDrawPolygon { // Remove it only if it is a layergroup. It can be only not a layergroup if a layer exists if (resultingLayer.getLayers && resultingLayer.getLayers().length === 0) { - this._map.geoman.removeLayer({ target: resultingLayer }); + this._map.geoman._removeLayer({ target: resultingLayer }); } if (resultingLayer instanceof LayerGroup) { diff --git a/src/js/Edit/Edit.Polyline.js b/src/js/Edit/Edit.Polyline.js index 9be3cb10..1fcfa4be 100644 --- a/src/js/Edit/Edit.Polyline.js +++ b/src/js/Edit/Edit.Polyline.js @@ -192,7 +192,7 @@ export default class GeomanEditPolyline extends Edit { this._markers = handleRing(coords); // handle possible limitation: maximum number of markers - this.filterMarkerGroup(); + this._filterMarkerGroup(); // add markerGroup to map map.addLayer(this._markerGroup); diff --git a/src/js/Edit/Edit.js b/src/js/Edit/Edit.js index 40a089cd..1d055a27 100644 --- a/src/js/Edit/Edit.js +++ b/src/js/Edit/Edit.js @@ -79,7 +79,7 @@ export default class Edit extends Class { remove() { const map = this._map || this._layer._map; - map.geoman.removeLayer({ target: this._layer }); + map.geoman._removeLayer({ target: this._layer }); } _vertexValidation(type, e) { diff --git a/src/js/Mixins/Dragging.js b/src/js/Mixins/Dragging.js index fce710b3..24e95d01 100644 --- a/src/js/Mixins/Dragging.js +++ b/src/js/Mixins/Dragging.js @@ -99,7 +99,6 @@ const DragMixin = { this._fireDragDisable(); }, - // TODO: make this private in the next major release dragging() { return this._dragging; }, diff --git a/src/js/Mixins/MarkerLimits.js b/src/js/Mixins/MarkerLimits.js index 9831d63a..1426ef1b 100644 --- a/src/js/Mixins/MarkerLimits.js +++ b/src/js/Mixins/MarkerLimits.js @@ -1,20 +1,20 @@ import { Util } from 'leaflet'; const MarkerLimits = { - filterMarkerGroup() { + _filterMarkerGroup() { // define cache of markers this.markerCache = []; - this.createCache(); + this._createCache(); // refresh cache when layer was edited (e.g. when a vertex was added or removed) - this._layer.on('geoman:edit', this.createCache, this); + this._layer.on('geoman:edit', this._createCache, this); // apply filter for the first time - this.applyLimitFilters({}); + this._applyLimitFilters({}); if (!this.throttledApplyLimitFilters) { this.throttledApplyLimitFilters = Util.throttle( - this.applyLimitFilters, + this._applyLimitFilters, 100, this ); @@ -35,11 +35,11 @@ const MarkerLimits = { }, _removeMarkerLimitEvents() { this._map.off('pointermove', this.throttledApplyLimitFilters, this); - this._layer.off('geoman:edit', this.createCache, this); + this._layer.off('geoman:edit', this._createCache, this); this._layer.off('geoman:disable', this._removeMarkerLimitEvents, this); this._layer.off('geoman:vertexremoved', this._initMarkers, this); }, - createCache() { + _createCache() { const allMarkers = [...this._markerGroup.getLayers(), ...this.markerCache]; this.markerCache = allMarkers.filter((v, i, s) => s.indexOf(v) === i); }, @@ -49,7 +49,7 @@ const MarkerLimits = { this.markerCache.splice(markerCacheIndex, 1); } }, - renderLimits(markers) { + _renderLimits(markers) { this.markerCache.forEach((l) => { if (markers.includes(l)) { this._markerGroup.addLayer(l); @@ -58,7 +58,7 @@ const MarkerLimits = { } }); }, - applyLimitFilters({ latlng = { lat: 0, lng: 0 } }) { + _applyLimitFilters({ latlng = { lat: 0, lng: 0 } }) { if (this._preventRenderMarkers) { return; } @@ -68,7 +68,7 @@ const MarkerLimits = { // all markers that we want to show const markersToAdd = [...makersNearCursor]; - this.renderLimits(markersToAdd); + this._renderLimits(markersToAdd); }, _filterClosestMarkers(latlng) { const markers = [...this.markerCache]; diff --git a/src/js/Mixins/Modes/Mode.Drag.js b/src/js/Mixins/Modes/Mode.Drag.js index dcd6341c..0f622162 100644 --- a/src/js/Mixins/Modes/Mode.Drag.js +++ b/src/js/Mixins/Modes/Mode.Drag.js @@ -18,7 +18,7 @@ const GlobalDragMode = { if (!this.throttledReInitDrag) { this.throttledReInitDrag = Util.throttle( - this.reinitGlobalDragMode, + this._reinitGlobalDragMode, 100, this ); @@ -61,7 +61,7 @@ const GlobalDragMode = { this.enableGlobalDragMode(); } }, - reinitGlobalDragMode() { + _reinitGlobalDragMode() { const layers = this._addedLayersDrag; this._addedLayersDrag = {}; if (this.globalDragModeEnabled()) { diff --git a/src/js/Mixins/Modes/Mode.Edit.js b/src/js/Mixins/Modes/Mode.Edit.js index 8a54387b..b7874108 100644 --- a/src/js/Mixins/Modes/Mode.Edit.js +++ b/src/js/Mixins/Modes/Mode.Edit.js @@ -27,7 +27,7 @@ const GlobalEditMode = { if (!this.throttledReInitEdit) { this.throttledReInitEdit = Util.throttle( - this.handleLayerAdditionInGlobalEditMode, + this._handleLayerAdditionInGlobalEditMode, 100, this ); @@ -77,7 +77,7 @@ const GlobalEditMode = { this.enableGlobalEditMode(options); } }, - handleLayerAdditionInGlobalEditMode() { + _handleLayerAdditionInGlobalEditMode() { const layers = this._addedLayersEdit; this._addedLayersEdit = {}; if (this.globalEditModeEnabled()) { diff --git a/src/js/Mixins/Modes/Mode.Removal.js b/src/js/Mixins/Modes/Mode.Removal.js index acee06f3..c5eb7ca0 100644 --- a/src/js/Mixins/Modes/Mode.Removal.js +++ b/src/js/Mixins/Modes/Mode.Removal.js @@ -11,13 +11,13 @@ const GlobalRemovalMode = { if (layer.geoman.enabled()) { layer.geoman.disable(); } - layer.on('click', this.removeLayer, this); + layer.on('click', this._removeLayer, this); } }); if (!this.throttledReInitRemoval) { this.throttledReInitRemoval = Util.throttle( - this.handleLayerAdditionInGlobalRemovalMode, + this._handleLayerAdditionInGlobalRemovalMode, 100, this ); @@ -36,7 +36,7 @@ const GlobalRemovalMode = { disableGlobalRemovalMode() { this._globalRemovalModeEnabled = false; this.map.eachLayer((layer) => { - layer.off('click', this.removeLayer, this); + layer.off('click', this._removeLayer, this); }); // remove map handler @@ -59,7 +59,7 @@ const GlobalRemovalMode = { this.enableGlobalRemovalMode(); } }, - removeLayer(e) { + _removeLayer(e) { const layer = e.target; // only remove layer, if it's handled by leaflet-geoman, // not a tempLayer and not currently being dragged @@ -88,7 +88,7 @@ const GlobalRemovalMode = { layer.geoman.options.allowRemoval ); }, - handleLayerAdditionInGlobalRemovalMode() { + _handleLayerAdditionInGlobalRemovalMode() { const layers = this._addedLayersRemoval; this._addedLayersRemoval = {}; if (this.globalRemovalModeEnabled()) { @@ -98,7 +98,7 @@ const GlobalRemovalMode = { if (layer.geoman.enabled()) { layer.geoman.disable(); } - layer.on('click', this.removeLayer, this); + layer.on('click', this._removeLayer, this); } } } diff --git a/src/js/Mixins/Modes/Mode.Rotate.js b/src/js/Mixins/Modes/Mode.Rotate.js index 5c5c86bd..d297d244 100644 --- a/src/js/Mixins/Modes/Mode.Rotate.js +++ b/src/js/Mixins/Modes/Mode.Rotate.js @@ -17,7 +17,7 @@ const GlobalRotateMode = { if (!this.throttledReInitRotate) { this.throttledReInitRotate = Util.throttle( - this.handleLayerAdditionInGlobalRotateMode, + this._handleLayerAdditionInGlobalRotateMode, 100, this ); @@ -70,7 +70,7 @@ const GlobalRotateMode = { layer.geoman.options.allowRotation ); }, - handleLayerAdditionInGlobalRotateMode() { + _handleLayerAdditionInGlobalRotateMode() { const layers = this._addedLayersRotate; this._addedLayersRotate = {}; if (this.globalRotateModeEnabled()) { From b61b1f3bc5b305ae0751cc1b82430ff632ffed6e Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 15:25:14 +0100 Subject: [PATCH 33/41] Remove default options of enable method --- src/js/Edit/Edit.CircleMarker.js | 3 +-- src/js/Edit/Edit.ImageOverlay.js | 3 +-- src/js/Edit/Edit.Marker.js | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/js/Edit/Edit.CircleMarker.js b/src/js/Edit/Edit.CircleMarker.js index d4e93a14..b7691354 100644 --- a/src/js/Edit/Edit.CircleMarker.js +++ b/src/js/Edit/Edit.CircleMarker.js @@ -26,8 +26,7 @@ export default class GeomanEditCircleMarker extends Edit { this._updateHiddenPolyCircle(); } - // TODO: remove default option in next major Release - enable(options = { draggable: true, snappable: true }) { + enable(options) { Util.setOptions(this, options); // layer is not allowed to edit diff --git a/src/js/Edit/Edit.ImageOverlay.js b/src/js/Edit/Edit.ImageOverlay.js index d4ce68ee..dab4b019 100644 --- a/src/js/Edit/Edit.ImageOverlay.js +++ b/src/js/Edit/Edit.ImageOverlay.js @@ -21,8 +21,7 @@ export default class GeomanEditImageOverlay extends Edit { return this._enabled; } - // TODO: remove default option in next major Release - enable(options = { draggable: true, snappable: true }) { + enable(options) { Util.setOptions(this, options); this._map = this._layer._map; // cancel when map isn't available, this happens when the polygon is removed before this fires diff --git a/src/js/Edit/Edit.Marker.js b/src/js/Edit/Edit.Marker.js index d08ce46c..d0b3c866 100644 --- a/src/js/Edit/Edit.Marker.js +++ b/src/js/Edit/Edit.Marker.js @@ -13,8 +13,7 @@ export default class GeomanEditMarker extends Edit { this._layer.on('dragend', this._onDragEnd, this); } - // TODO: remove default option in next major Release - enable(options = { draggable: true }) { + enable(options) { Util.setOptions(this, options); // layer is not allowed to edit From 27ebea2214450849dd7b296f3b05f9bf52f38a58 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 15:35:16 +0100 Subject: [PATCH 34/41] Replace "snappable" with "allowSnapping" --- cypress/e2e/circle.cy.js | 4 ++-- cypress/e2e/marker.cy.js | 2 +- cypress/e2e/options.cy.js | 12 ++++++------ cypress/e2e/polyline.cy.js | 4 ++-- demo/demo-canvas.js | 10 +++++----- demo/demo.js | 10 +++++----- leaflet-geoman.d.ts | 2 +- src/js/Draw/Draw.CircleMarker.js | 4 ++-- src/js/Draw/Draw.Marker.js | 4 ++-- src/js/Draw/Draw.Polygon.js | 2 +- src/js/Draw/Draw.Polyline.js | 6 +++--- src/js/Draw/Draw.Rectangle.js | 4 ++-- src/js/Draw/Draw.Text.js | 4 ++-- src/js/Draw/Draw.js | 2 +- src/js/Edit/Edit.CircleMarker.js | 4 ++-- src/js/Edit/Edit.Marker.js | 2 +- src/js/Edit/Edit.Polyline.js | 6 +++--- src/js/Edit/Edit.Rectangle.js | 2 +- src/js/Edit/Edit.Text.js | 2 +- src/js/Edit/Edit.js | 2 +- src/js/GeomanMap.js | 2 +- src/js/Mixins/Dragging.js | 4 ++-- src/js/Mixins/Rotating.js | 2 +- src/js/Toolbar/GeomanToolbar.js | 2 +- 24 files changed, 49 insertions(+), 49 deletions(-) diff --git a/cypress/e2e/circle.cy.js b/cypress/e2e/circle.cy.js index 1e1282ef..d1833682 100644 --- a/cypress/e2e/circle.cy.js +++ b/cypress/e2e/circle.cy.js @@ -484,7 +484,7 @@ describe('Draw Circle', () => { cy.get(mapSelector).click(300, 200); }); - it('checks if editing with snappable:false works', () => { + it('checks if editing with allowSnapping:false works', () => { cy.toolbarButton('circle') .click() .closest('.leaflet-geoman-button-container') @@ -494,7 +494,7 @@ describe('Draw Circle', () => { cy.get(mapSelector).click(300, 200); cy.window().then(({ map }) => { - map.geoman.setGlobalOptions({ snappable: false }); + map.geoman.setGlobalOptions({ allowSnapping: false }); }); cy.window().then(({ map }) => { diff --git a/cypress/e2e/marker.cy.js b/cypress/e2e/marker.cy.js index 87c4d908..988d1f76 100644 --- a/cypress/e2e/marker.cy.js +++ b/cypress/e2e/marker.cy.js @@ -26,7 +26,7 @@ describe('Draw Marker', () => { const markerLayer = new L.GeoJSON().addTo(map); map.geoman.enableDraw('Marker', { - snappable: false, + allowSnapping: false, }); cy.get(mapSelector) diff --git a/cypress/e2e/options.cy.js b/cypress/e2e/options.cy.js index 3d4378d8..09298820 100644 --- a/cypress/e2e/options.cy.js +++ b/cypress/e2e/options.cy.js @@ -35,30 +35,30 @@ describe('Options', () => { cy.window().then(({ map }) => { map.geoman.setGlobalOptions({ pinning: false, - snappable: false, + allowSnapping: false, }); }); cy.get('@poly').then((poly) => { - expect(poly.geoman.options.snappable).to.equal(false); + expect(poly.geoman.options.allowSnapping).to.equal(false); }); cy.window().then(({ map }) => { map.geoman.setGlobalOptions({ pinning: true, - snappable: true, + allowSnapping: true, }); }); cy.get('@poly').then((poly) => { - expect(poly.geoman.options.snappable).to.equal(true); + expect(poly.geoman.options.allowSnapping).to.equal(true); }); }); it('global options work on Draw', () => { cy.window().then(({ map }) => { map.geoman.setGlobalOptions({ - snappable: false, + allowSnapping: false, }); }); @@ -67,7 +67,7 @@ describe('Options', () => { cy.get(mapSelector).click(300, 100); cy.window().then(({ map }) => { - expect(map.geoman.Draw.Marker.options.snappable).to.equal(false); + expect(map.geoman.Draw.Marker.options.allowSnapping).to.equal(false); }); // cy.get(mapSelector) diff --git a/cypress/e2e/polyline.cy.js b/cypress/e2e/polyline.cy.js index 1566151e..a2b1b098 100644 --- a/cypress/e2e/polyline.cy.js +++ b/cypress/e2e/polyline.cy.js @@ -54,7 +54,7 @@ describe('Draw & Edit Polyline', () => { map.on('geoman:create', (e) => { e.layer.geoman.enable({ allowSelfIntersection: false, - snappable: false, + allowSnapping: false, snapDistance: 20, }); @@ -62,7 +62,7 @@ describe('Draw & Edit Polyline', () => { }); map.geoman.enableDraw('Polygon', { - snappable: false, + allowSnapping: false, snapDistance: 20, allowSelfIntersection: true, finishOn: 'dblclick', diff --git a/demo/demo-canvas.js b/demo/demo-canvas.js index f3127a1f..22bcb0e9 100644 --- a/demo/demo-canvas.js +++ b/demo/demo-canvas.js @@ -104,7 +104,7 @@ map2.geoman.addControls({ map2.geoman.disableDraw(); // map2.geoman.enableDraw('Circle', { -// snappable: true, +// allowSnapping: true, // cursorMarker: true // }); @@ -147,7 +147,7 @@ geoJsonLayer.addTo(map2); geoJsonLayer.addData(geoJsonData); // geoJsonLayer.geoman.toggleEdit({ // draggable: true, -// snappable: true, +// allowSnapping: true, // }); map3.geoman.addControls({ @@ -164,7 +164,7 @@ const markerStyle = { }; map3.geoman.enableDraw('Polygon', { - snappable: true, + allowSnapping: true, templineStyle: { color: 'blue', }, @@ -337,7 +337,7 @@ const feature = { const layerGroup = new FeatureGroup([layerGroupItem1]).addTo(map4); layerGroup.geoman.toggleEdit({ draggable: true, - snappable: true, + allowSnapping: true, snapDistance: 30, }); const someLayer = new GeoJSON(feature); @@ -366,7 +366,7 @@ map4.geoman.enableDraw('Polygon', { map4.geoman.disableDraw(); map4.geoman.enableDraw('Marker', { - snappable: false, + allowSnapping: false, }); map4.geoman.disableDraw(); diff --git a/demo/demo.js b/demo/demo.js index 3382e369..0602a05f 100644 --- a/demo/demo.js +++ b/demo/demo.js @@ -105,7 +105,7 @@ map2.geoman.addControls({ // map2.geoman.disableDraw(); // map2.geoman.enableDraw('Circle', { -// snappable: true, +// allowSnapping: true, // cursorMarker: true // }); @@ -238,7 +238,7 @@ theCollection.on('geoman:dragstart', (e) => { // geoJsonLayer.geoman.toggleEdit({ // draggable: true, -// snappable: true, +// allowSnapping: true, // }); map3.geoman.addControls({ @@ -255,7 +255,7 @@ const markerStyle = { }; map3.geoman.enableDraw('Polygon', { - snappable: true, + allowSnapping: true, templineStyle: { color: 'blue', }, @@ -431,7 +431,7 @@ const feature = { const layerGroup = new FeatureGroup([layerGroupItem1]).addTo(map4); layerGroup.geoman.toggleEdit({ draggable: true, - snappable: true, + allowSnapping: true, snapDistance: 30, }); const someLayer = new GeoJSON(feature); @@ -459,7 +459,7 @@ map4.geoman.enableDraw('Polygon', { map4.geoman.disableDraw(); map4.geoman.enableDraw('Marker', { - snappable: false, + allowSnapping: false, }); map4.geoman.disableDraw(); diff --git a/leaflet-geoman.d.ts b/leaflet-geoman.d.ts index 94dec092..4e8a4b8b 100644 --- a/leaflet-geoman.d.ts +++ b/leaflet-geoman.d.ts @@ -1942,7 +1942,7 @@ declare module 'leaflet' { interface SnappingOptions { /** Enable snapping to other layers vertices for precision drawing. Can be disabled by holding the ALT key (default:true). */ - snappable?: boolean; + allowSnapping?: boolean; /** The distance to another vertex when a snap should happen (default:20). */ snapDistance?: number; diff --git a/src/js/Draw/Draw.CircleMarker.js b/src/js/Draw/Draw.CircleMarker.js index 6840e9fb..a31faa92 100644 --- a/src/js/Draw/Draw.CircleMarker.js +++ b/src/js/Draw/Draw.CircleMarker.js @@ -198,7 +198,7 @@ export default class GeomanDrawCircleMarker extends Draw { this._map.geoman.Toolbar.toggleButton(this.toolbarButtonName, false); // cleanup snapping - if (this.options.snappable) { + if (this.options.allowSnapping) { this._cleanupSnapping(); } @@ -303,7 +303,7 @@ export default class GeomanDrawCircleMarker extends Draw { this._hintMarker.setLatLng(this._getNewDestinationOfHintMarker()); // if snapping is enabled, do it - if (this.options.snappable) { + if (this.options.allowSnapping) { const fakeDragEvent = e; fakeDragEvent.target = this._hintMarker; this._handleSnapping(fakeDragEvent); diff --git a/src/js/Draw/Draw.Marker.js b/src/js/Draw/Draw.Marker.js index af9925fe..6d202671 100644 --- a/src/js/Draw/Draw.Marker.js +++ b/src/js/Draw/Draw.Marker.js @@ -102,7 +102,7 @@ export default class GeomanDrawMarker extends Draw { this._map.geoman.Toolbar.toggleButton(this.toolbarButtonName, false); // cleanup snapping - if (this.options.snappable) { + if (this.options.allowSnapping) { this._cleanupSnapping(); } @@ -137,7 +137,7 @@ export default class GeomanDrawMarker extends Draw { this._hintMarker.setLatLng(e.latlng); // if snapping is enabled, do it - if (this.options.snappable) { + if (this.options.allowSnapping) { const fakeDragEvent = e; fakeDragEvent.target = this._hintMarker; this._handleSnapping(fakeDragEvent); diff --git a/src/js/Draw/Draw.Polygon.js b/src/js/Draw/Draw.Polygon.js index 52039b7b..f0a00123 100644 --- a/src/js/Draw/Draw.Polygon.js +++ b/src/js/Draw/Draw.Polygon.js @@ -38,7 +38,7 @@ export default class GeomanDrawPolygon extends GeomanDrawLine { // add the first vertex to "other snapping layers" so the polygon is easier to finish this._tempSnapLayerIndex = this._otherSnapLayers.push(marker) - 1; - if (this.options.snappable) { + if (this.options.allowSnapping) { this._cleanupSnapping(); } } else { diff --git a/src/js/Draw/Draw.Polyline.js b/src/js/Draw/Draw.Polyline.js index 3055b900..d33a0f48 100644 --- a/src/js/Draw/Draw.Polyline.js +++ b/src/js/Draw/Draw.Polyline.js @@ -144,7 +144,7 @@ export default class GeomanDrawPolyline extends Draw { this._map.geoman.Toolbar.toggleButton(this.toolbarButtonName, false); // cleanup snapping - if (this.options.snappable) { + if (this.options.allowSnapping) { this._cleanupSnapping(); } @@ -184,7 +184,7 @@ export default class GeomanDrawPolyline extends Draw { this._hintMarker.setLatLng(e.latlng); // if snapping is enabled, do it - if (this.options.snappable) { + if (this.options.allowSnapping) { const fakeDragEvent = e; fakeDragEvent.target = this._hintMarker; this._handleSnapping(fakeDragEvent); @@ -386,7 +386,7 @@ export default class GeomanDrawPolyline extends Draw { // fire the geoman:create event and pass shape and layer this._fireCreate(polylineLayer); - if (this.options.snappable) { + if (this.options.allowSnapping) { this._cleanupSnapping(); } diff --git a/src/js/Draw/Draw.Rectangle.js b/src/js/Draw/Draw.Rectangle.js index 3ac6dae5..f2718b35 100644 --- a/src/js/Draw/Draw.Rectangle.js +++ b/src/js/Draw/Draw.Rectangle.js @@ -144,7 +144,7 @@ export default class GeomanDrawRectangle extends Draw { this._map.geoman.Toolbar.toggleButton(this.toolbarButtonName, false); // cleanup snapping - if (this.options.snappable) { + if (this.options.allowSnapping) { this._cleanupSnapping(); } // fire drawend event @@ -213,7 +213,7 @@ export default class GeomanDrawRectangle extends Draw { this._hintMarker.setLatLng(e.latlng); // if snapping is enabled, do it - if (this.options.snappable) { + if (this.options.allowSnapping) { const fakeDragEvent = e; fakeDragEvent.target = this._hintMarker; this._handleSnapping(fakeDragEvent); diff --git a/src/js/Draw/Draw.Text.js b/src/js/Draw/Draw.Text.js index 109a8869..d7f3e041 100644 --- a/src/js/Draw/Draw.Text.js +++ b/src/js/Draw/Draw.Text.js @@ -92,7 +92,7 @@ export default class GeomanDrawText extends Draw { this._map.geoman.Toolbar.toggleButton(this.toolbarButtonName, false); // cleanup snapping - if (this.options.snappable) { + if (this.options.allowSnapping) { this._cleanupSnapping(); } @@ -118,7 +118,7 @@ export default class GeomanDrawText extends Draw { this._hintMarker.setLatLng(e.latlng); // if snapping is enabled, do it - if (this.options.snappable) { + if (this.options.allowSnapping) { const fakeDragEvent = e; fakeDragEvent.target = this._hintMarker; this._handleSnapping(fakeDragEvent); diff --git a/src/js/Draw/Draw.js b/src/js/Draw/Draw.js index b7125c6d..dd948bdd 100644 --- a/src/js/Draw/Draw.js +++ b/src/js/Draw/Draw.js @@ -19,7 +19,7 @@ export default class Draw extends Class { this.include(EventMixin); this.setDefaultOptions({ - snappable: true, // TODO: next major Release, rename it to allowSnapping + allowSnapping: true, snapDistance: 20, snapMiddle: false, allowSelfIntersection: true, diff --git a/src/js/Edit/Edit.CircleMarker.js b/src/js/Edit/Edit.CircleMarker.js index b7691354..6322f48f 100644 --- a/src/js/Edit/Edit.CircleMarker.js +++ b/src/js/Edit/Edit.CircleMarker.js @@ -135,7 +135,7 @@ export default class GeomanEditCircleMarker extends Edit { this._map.on('move', this._syncMarkers, this); // init snapping in different ways - if (this.options.snappable) { + if (this.options.allowSnapping) { this._initSnappableMarkers(); // update marker latlng when snapped latlng radius is out of min/max this._outerMarker.on('drag', this._handleOuterMarkerSnapping, this); @@ -152,7 +152,7 @@ export default class GeomanEditCircleMarker extends Edit { // only update the circle border poly this._map.on('move', this._updateHiddenPolyCircle, this); - if (this.options.snappable) { + if (this.options.allowSnapping) { this._initSnappableMarkersDrag(); } else { this._disableSnappingDrag(); diff --git a/src/js/Edit/Edit.Marker.js b/src/js/Edit/Edit.Marker.js index d0b3c866..25cd9490 100644 --- a/src/js/Edit/Edit.Marker.js +++ b/src/js/Edit/Edit.Marker.js @@ -75,7 +75,7 @@ export default class GeomanEditMarker extends Edit { } applyOptions() { - if (this.options.snappable) { + if (this.options.allowSnapping) { this._initSnappableMarkers(); } else { this._disableSnapping(); diff --git a/src/js/Edit/Edit.Polyline.js b/src/js/Edit/Edit.Polyline.js index 1fcfa4be..bb4a1036 100644 --- a/src/js/Edit/Edit.Polyline.js +++ b/src/js/Edit/Edit.Polyline.js @@ -142,7 +142,7 @@ export default class GeomanEditPolyline extends Edit { } applyOptions() { - if (this.options.snappable) { + if (this.options.allowSnapping) { this._initSnappableMarkers(); } else { this._disableSnapping(); @@ -362,7 +362,7 @@ export default class GeomanEditPolyline extends Edit { latlng ); - if (this.options.snappable) { + if (this.options.allowSnapping) { this._initSnappableMarkers(); } } @@ -841,7 +841,7 @@ export default class GeomanEditPolyline extends Edit { // re-enable markers for the new coords this._initMarkers(); - if (this.options.snappable) { + if (this.options.allowSnapping) { this._initSnappableMarkers(); } diff --git a/src/js/Edit/Edit.Rectangle.js b/src/js/Edit/Edit.Rectangle.js index 806f54bc..4c33f46c 100644 --- a/src/js/Edit/Edit.Rectangle.js +++ b/src/js/Edit/Edit.Rectangle.js @@ -41,7 +41,7 @@ export default class GeomanEditRectangle extends GeomanEditPolygon { } applyOptions() { - if (this.options.snappable) { + if (this.options.allowSnapping) { this._initSnappableMarkers(); } else { this._disableSnapping(); diff --git a/src/js/Edit/Edit.Text.js b/src/js/Edit/Edit.Text.js index 56dd6ec4..66e293f6 100644 --- a/src/js/Edit/Edit.Text.js +++ b/src/js/Edit/Edit.Text.js @@ -102,7 +102,7 @@ export default class GeomanEditCircleText extends Edit { } applyOptions() { - if (this.options.snappable) { + if (this.options.allowSnapping) { this._initSnappableMarkers(); } else { this._disableSnapping(); diff --git a/src/js/Edit/Edit.js b/src/js/Edit/Edit.js index 1d055a27..ce7512f8 100644 --- a/src/js/Edit/Edit.js +++ b/src/js/Edit/Edit.js @@ -12,7 +12,7 @@ export default class Edit extends Class { this.include(EventMixin); this.setDefaultOptions({ - snappable: true, // TODO: next major Release, rename it to allowSnapping + allowSnapping: true, snapDistance: 20, allowSelfIntersection: true, allowSelfIntersectionEdit: false, diff --git a/src/js/GeomanMap.js b/src/js/GeomanMap.js index c9983f41..462bab96 100644 --- a/src/js/GeomanMap.js +++ b/src/js/GeomanMap.js @@ -29,7 +29,7 @@ export default class GeomanMap extends Class { this.Keyboard = createKeyboardMixins(); this.globalOptions = { - snappable: true, + allowSnapping: true, layerGroup: undefined, snappingOrder: [ 'Marker', diff --git a/src/js/Mixins/Dragging.js b/src/js/Mixins/Dragging.js index 24e95d01..8df5d6d5 100644 --- a/src/js/Mixins/Dragging.js +++ b/src/js/Mixins/Dragging.js @@ -118,7 +118,7 @@ const DragMixin = { const layersToSyncFound = this._syncLayers('_dragMixinOnPointerDown', e); if (this._layer instanceof Marker) { - if (this.options.snappable && !fromLayerSync && !layersToSyncFound) { + if (this.options.allowSnapping && !fromLayerSync && !layersToSyncFound) { this._initSnappableMarkers(); } else { this._disableSnapping(); @@ -132,7 +132,7 @@ const DragMixin = { _editableOption = 'resizeableCircle'; } - if (this.options.snappable && !fromLayerSync && !layersToSyncFound) { + if (this.options.allowSnapping && !fromLayerSync && !layersToSyncFound) { if (!this._layer.geoman.options[_editableOption]) { this._initSnappableMarkersDrag(); } diff --git a/src/js/Mixins/Rotating.js b/src/js/Mixins/Rotating.js index eafc4a47..88f12686 100644 --- a/src/js/Mixins/Rotating.js +++ b/src/js/Mixins/Rotating.js @@ -188,7 +188,7 @@ const RotateMixin = { ); this._rotatePoly.geoman.setOptions({ rotate: true, - snappable: false, + allowSnapping: false, hideMiddleMarkers: true, }); // we connect the temp polygon (that will be enabled for rotation) with the current layer, so that we can rotate the current layer too diff --git a/src/js/Toolbar/GeomanToolbar.js b/src/js/Toolbar/GeomanToolbar.js index f9f95feb..3def1457 100644 --- a/src/js/Toolbar/GeomanToolbar.js +++ b/src/js/Toolbar/GeomanToolbar.js @@ -354,7 +354,7 @@ export default class Toolbar extends Class { afterClick: (ctx) => { // enable polygon drawing mode without snap this.map.geoman.Draw[ctx.button._button.jsClass].toggle({ - snappable: true, + allowSnapping: true, cursorMarker: true, allowSelfIntersection: false, }); From c6e8ed42f2044ff8bcfce04a2d7787ead97b2c83 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 16:04:39 +0100 Subject: [PATCH 35/41] Replace "draggable" with "allowDragging" --- cypress/e2e/polygon.cy.js | 4 ++-- cypress/e2e/rectangle.cy.js | 2 +- demo/demo-canvas.js | 5 ++--- demo/demo.js | 5 ++--- leaflet-geoman.d.ts | 4 ++-- src/js/Draw/Draw.js | 1 - src/js/Edit/Edit.CircleMarker.js | 4 ++-- src/js/Edit/Edit.Marker.js | 2 +- src/js/Edit/Edit.js | 2 +- src/js/GeomanMap.js | 2 +- src/js/Mixins/Dragging.js | 4 ++-- src/js/Mixins/Modes/Mode.Drag.js | 2 +- 12 files changed, 17 insertions(+), 20 deletions(-) diff --git a/cypress/e2e/polygon.cy.js b/cypress/e2e/polygon.cy.js index 602c6800..4f461c32 100644 --- a/cypress/e2e/polygon.cy.js +++ b/cypress/e2e/polygon.cy.js @@ -991,7 +991,7 @@ describe('Draw & Edit Poly', () => { }); }); - it('disable Drag-Mode for layer with draggable: false', () => { + it('disable Drag-Mode for layer with allowDragging: false', () => { cy.toolbarButton('polygon').click(); cy.get(mapSelector) .click(150, 250) @@ -1000,7 +1000,7 @@ describe('Draw & Edit Poly', () => { .click(150, 250); cy.window().then(({ map }) => { - map.geoman.setGlobalOptions({ draggable: false }); + map.geoman.setGlobalOptions({ allowDragging: false }); }); cy.toolbarButton('drag').click(); diff --git a/cypress/e2e/rectangle.cy.js b/cypress/e2e/rectangle.cy.js index 2176ff37..f0f14ac7 100644 --- a/cypress/e2e/rectangle.cy.js +++ b/cypress/e2e/rectangle.cy.js @@ -60,7 +60,7 @@ describe('Draw Rectangle', () => { cy.get('@marker').then((marker) => { expect(marker._geomanTempLayer).to.equal(true); - expect(marker.options.draggable).to.equal(false); + expect(marker.options.allowDragging).to.equal(false); }); }); diff --git a/demo/demo-canvas.js b/demo/demo-canvas.js index 22bcb0e9..b206be1e 100644 --- a/demo/demo-canvas.js +++ b/demo/demo-canvas.js @@ -146,7 +146,7 @@ const geoJsonLayer = new GeoJSON(null, { geomanIgnore: false }); geoJsonLayer.addTo(map2); geoJsonLayer.addData(geoJsonData); // geoJsonLayer.geoman.toggleEdit({ -// draggable: true, +// allowDragging: true, // allowSnapping: true, // }); @@ -160,7 +160,6 @@ map3.geoman.addControls({ const markerStyle = { opacity: 0.5, - draggable: false, }; map3.geoman.enableDraw('Polygon', { @@ -336,7 +335,7 @@ const feature = { const layerGroup = new FeatureGroup([layerGroupItem1]).addTo(map4); layerGroup.geoman.toggleEdit({ - draggable: true, + allowDragging: true, allowSnapping: true, snapDistance: 30, }); diff --git a/demo/demo.js b/demo/demo.js index 0602a05f..ab8947ea 100644 --- a/demo/demo.js +++ b/demo/demo.js @@ -237,7 +237,7 @@ theCollection.on('geoman:dragstart', (e) => { // geoJsonLayer.addData(geoJsonData); // geoJsonLayer.geoman.toggleEdit({ -// draggable: true, +// allowDragging: true, // allowSnapping: true, // }); @@ -251,7 +251,6 @@ map3.geoman.addControls({ const markerStyle = { opacity: 0.5, - draggable: false, }; map3.geoman.enableDraw('Polygon', { @@ -430,7 +429,7 @@ const feature = { const layerGroup = new FeatureGroup([layerGroupItem1]).addTo(map4); layerGroup.geoman.toggleEdit({ - draggable: true, + allowDragging: true, allowSnapping: true, snapDistance: 30, }); diff --git a/leaflet-geoman.d.ts b/leaflet-geoman.d.ts index 4e8a4b8b..4f8c628a 100644 --- a/leaflet-geoman.d.ts +++ b/leaflet-geoman.d.ts @@ -1734,7 +1734,7 @@ declare module 'leaflet' { allowRotation?: boolean; /** Dragging can be disabled for the layer. (default:true). */ - draggable?: boolean; + allowDragging?: boolean; /** Leaflet layer event to add a vertex to a Polyline or Polygon, like dblclick. (default:click). */ addVertexOn?: @@ -1863,7 +1863,7 @@ declare module 'leaflet' { /** Leaflet path options for the drawn layer (Only for L.Path layers). (default:null). */ pathOptions?: L.PathOptions | L.CircleMarkerOptions; - /** Leaflet marker options (only for drawing markers). (default:{draggable:true}). */ + /** Leaflet marker options (only for drawing markers). */ markerStyle?: L.MarkerOptions; /** Show a marker at the cursor (default:true). */ diff --git a/src/js/Draw/Draw.js b/src/js/Draw/Draw.js index dd948bdd..346095b7 100644 --- a/src/js/Draw/Draw.js +++ b/src/js/Draw/Draw.js @@ -33,7 +33,6 @@ export default class Draw extends Class { cursorMarker: true, finishOn: null, markerStyle: { - draggable: true, icon: new Icon(), }, hideMiddleMarkers: false, diff --git a/src/js/Edit/Edit.CircleMarker.js b/src/js/Edit/Edit.CircleMarker.js index 6322f48f..de418df6 100644 --- a/src/js/Edit/Edit.CircleMarker.js +++ b/src/js/Edit/Edit.CircleMarker.js @@ -146,7 +146,7 @@ export default class GeomanEditCircleMarker extends Edit { this._disableSnapping(); } } else { - if (this.options.draggable) { + if (this.options.allowDragging) { this.enableLayerDrag(); } // only update the circle border poly @@ -212,7 +212,7 @@ export default class GeomanEditCircleMarker extends Edit { _createCenterMarker(latlng) { const marker = this._createMarker(latlng); - if (this.options.draggable) { + if (this.options.allowDragging) { marker._icon.classList.add('leaflet-geoman-draggable'); marker.on('move', this._moveCircle, this); } else { diff --git a/src/js/Edit/Edit.Marker.js b/src/js/Edit/Edit.Marker.js index 25cd9490..4a474a49 100644 --- a/src/js/Edit/Edit.Marker.js +++ b/src/js/Edit/Edit.Marker.js @@ -81,7 +81,7 @@ export default class GeomanEditMarker extends Edit { this._disableSnapping(); } - if (this.options.draggable) { + if (this.options.allowDragging) { this.enableLayerDrag(); } else { this.disableLayerDrag(); diff --git a/src/js/Edit/Edit.js b/src/js/Edit/Edit.js index ce7512f8..482340e9 100644 --- a/src/js/Edit/Edit.js +++ b/src/js/Edit/Edit.js @@ -22,7 +22,7 @@ export default class Edit extends Class { hideMiddleMarkers: false, snapSegment: true, syncLayersOnDrag: false, - draggable: true, // TODO: next major Release, rename it to allowDragging + allowDragging: true, allowEditing: true, // disable all interactions on a layer which are activated with `enable()`. For example a Circle can't be dragged in Edit-Mode allowRemoval: true, allowCutting: true, diff --git a/src/js/GeomanMap.js b/src/js/GeomanMap.js index 462bab96..2d63c411 100644 --- a/src/js/GeomanMap.js +++ b/src/js/GeomanMap.js @@ -44,7 +44,7 @@ export default class GeomanMap extends Class { layerPane: 'overlayPane', markerPane: 'markerPane', }, - draggable: true, + allowDragging: true, }; this.Keyboard._initKeyListener(map); diff --git a/src/js/Mixins/Dragging.js b/src/js/Mixins/Dragging.js index 8df5d6d5..acd22b5f 100644 --- a/src/js/Mixins/Dragging.js +++ b/src/js/Mixins/Dragging.js @@ -12,7 +12,7 @@ import { getRenderer } from '../helpers'; const DragMixin = { enableLayerDrag() { // layer is not allowed to dragged or is not on the map - if (!this.options.draggable || !this._layer._map) { + if (!this.options.allowDragging || !this._layer._map) { return; } @@ -403,7 +403,7 @@ const DragMixin = { // filter out layers that don't have leaflet-geoman and not allowed to drag layersToSync = layersToSync .filter((layer) => !!layer.geoman) - .filter((layer) => !!layer.geoman.options.draggable); + .filter((layer) => !!layer.geoman.options.allowDragging); layersToSync.forEach((layer) => { if (layer !== this._layer && layer.geoman[fnc]) { layer._snapped = false; diff --git a/src/js/Mixins/Modes/Mode.Drag.js b/src/js/Mixins/Modes/Mode.Drag.js index 0f622162..3c39b4bf 100644 --- a/src/js/Mixins/Modes/Mode.Drag.js +++ b/src/js/Mixins/Modes/Mode.Drag.js @@ -84,7 +84,7 @@ const GlobalDragMode = { ((!Geoman.optIn && !layer.options.geomanIgnore) || // if optIn is not set / true and geomanIgnore is not set / true (default) (Geoman.optIn && layer.options.geomanIgnore === false)) && // if optIn is true and geomanIgnore is false !layer._geomanTempLayer && - layer.geoman.options.draggable + layer.geoman.options.allowDragging ); }, }; From 80c6c1fb9ba223064b799b573762760f9f37ffb9 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 16:34:25 +0100 Subject: [PATCH 36/41] Remove auto continueDrawing for Marker & CircleMarker --- cypress/e2e/circlemarker.cy.js | 11 ++++++++--- cypress/e2e/marker.cy.js | 9 +++++++++ leaflet-geoman.d.ts | 2 +- src/js/Draw/Draw.js | 4 ---- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/cypress/e2e/circlemarker.cy.js b/cypress/e2e/circlemarker.cy.js index 091363f8..c1154fff 100644 --- a/cypress/e2e/circlemarker.cy.js +++ b/cypress/e2e/circlemarker.cy.js @@ -17,6 +17,10 @@ describe('Draw Circle Marker', () => { // No circle layers cy.hasCircleLayers(0); + cy.window().then(({ map }) => { + map.geoman.setGlobalOptions({ continueDrawing: true }); + }); + cy.toolbarButton('circle-marker') .click() .closest('.leaflet-geoman-button-container') @@ -233,6 +237,7 @@ describe('Draw Circle Marker', () => { map.geoman.setGlobalOptions({ markerEditable: true, preventMarkerRemoval: true, + continueDrawing: true, }); }); @@ -369,9 +374,9 @@ describe('Draw Circle Marker', () => { minZoom: -2, }).setView([0, 0], 0); mapSimple.geoman.addControls(); - mapSimple.geoman.enableDraw('CircleMarker', { pathOptions: { radius: 40 }, + continueDrawing: true, }); }); @@ -396,6 +401,7 @@ describe('Draw Circle Marker', () => { mapSimple.geoman.enableDraw('CircleMarker', { resizeableCircleMarker: true, + continueDrawing: true, }); }); @@ -453,6 +459,7 @@ describe('Draw Circle Marker', () => { cy.window().then(({ map }) => { map.geoman.setGlobalOptions({ resizeableCircleMarker: true, + continueDrawing: true, }); }); cy.toolbarButton('circle-marker') @@ -565,8 +572,6 @@ describe('Draw Circle Marker', () => { cy.get(mapSelector).click(200, 200); - cy.toolbarButton('circle-marker').click(); - cy.window().then(({ map }) => { const layer = map.geoman.getGeomanDrawLayers()[0]; diff --git a/cypress/e2e/marker.cy.js b/cypress/e2e/marker.cy.js index 988d1f76..79d7f574 100644 --- a/cypress/e2e/marker.cy.js +++ b/cypress/e2e/marker.cy.js @@ -57,6 +57,10 @@ describe('Draw Marker', () => { }); it('places markers', () => { + cy.window().then(({ map }) => { + map.geoman.setGlobalOptions({ continueDrawing: true }); + }); + cy.toolbarButton('marker').click(); cy.get(mapSelector) @@ -231,6 +235,7 @@ describe('Draw Marker', () => { map.geoman.setGlobalOptions({ markerEditable: true, preventMarkerRemoval: true, + continueDrawing: true, }); }); @@ -318,6 +323,10 @@ describe('Draw Marker', () => { }); it('does not create additional marker while dragging in draw mode', () => { + cy.window().then(({ map }) => { + map.geoman.setGlobalOptions({ continueDrawing: true }); + }); + cy.toolbarButton('marker').click(); cy.get(mapSelector).click(150, 250); diff --git a/leaflet-geoman.d.ts b/leaflet-geoman.d.ts index 4f8c628a..d20ad0d6 100644 --- a/leaflet-geoman.d.ts +++ b/leaflet-geoman.d.ts @@ -1904,7 +1904,7 @@ declare module 'leaflet' { /** Markers and CircleMarkers are editable during the draw-session (you can drag them around immediately after drawing them) (default:true). */ markerEditable?: boolean; - /** Draw-Mode stays enabled after finishing a layer to immediately draw the next layer. Defaults to true for Markers and CircleMarkers and false for all other layers. */ + /** Draw-Mode stays enabled after finishing a layer to immediately draw the next layer (default: false). */ continueDrawing?: boolean; /** Angel of rectangle. */ diff --git a/src/js/Draw/Draw.js b/src/js/Draw/Draw.js index 346095b7..24d6eadb 100644 --- a/src/js/Draw/Draw.js +++ b/src/js/Draw/Draw.js @@ -94,10 +94,6 @@ export default class Draw extends Class { this.shapes.forEach((shape) => { this[shape] = new Draw[shape](this._map); }); - - // TODO: Remove this with the next major release - this.Marker.setOptions({ continueDrawing: true }); - this.CircleMarker.setOptions({ continueDrawing: true }); } setPathOptions(options, mergeOptions = false) { From b257cf6e1228fd20def36b53647139517048a0db Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 16:46:37 +0100 Subject: [PATCH 37/41] Make removeLastVertex public --- cypress/e2e/polygon.cy.js | 2 +- cypress/e2e/tooltips.cy.js | 2 +- leaflet-geoman.d.ts | 3 +++ src/js/Draw/Draw.Polyline.js | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/cypress/e2e/polygon.cy.js b/cypress/e2e/polygon.cy.js index 4f461c32..0cb94767 100644 --- a/cypress/e2e/polygon.cy.js +++ b/cypress/e2e/polygon.cy.js @@ -372,7 +372,7 @@ describe('Draw & Edit Poly', () => { cy.hasVertexMarkers(5); cy.window().then(({ map }) => { - map.geoman.Draw.Polygon._removeLastVertex(); + map.geoman.Draw.Polygon.removeLastVertex(); }); cy.hasVertexMarkers(4); diff --git a/cypress/e2e/tooltips.cy.js b/cypress/e2e/tooltips.cy.js index 14029de4..12136fc2 100644 --- a/cypress/e2e/tooltips.cy.js +++ b/cypress/e2e/tooltips.cy.js @@ -228,7 +228,7 @@ describe('Shows Tooltips', () => { }); cy.window().then(({ map }) => { - map.geoman.Draw.Polygon._removeLastVertex(); + map.geoman.Draw.Polygon.removeLastVertex(); }); cy.get('.leaflet-tooltip-bottom').then((el) => { diff --git a/leaflet-geoman.d.ts b/leaflet-geoman.d.ts index d20ad0d6..ce25d7c2 100644 --- a/leaflet-geoman.d.ts +++ b/leaflet-geoman.d.ts @@ -1641,6 +1641,9 @@ declare module 'leaflet' { /** Get options */ getOptions(): DrawModeOptions; + + /** Removes the last vertex from the drawing layer (Works only for Polyline and Polygon). */ + removeLastVertex(): void; } interface LassoDraw { diff --git a/src/js/Draw/Draw.Polyline.js b/src/js/Draw/Draw.Polyline.js index d33a0f48..c47aa90e 100644 --- a/src/js/Draw/Draw.Polyline.js +++ b/src/js/Draw/Draw.Polyline.js @@ -307,7 +307,7 @@ export default class GeomanDrawPolyline extends Draw { this._hintline.setLatLngs([hintMarkerLatLng, hintMarkerLatLng]); } - _removeLastVertex() { + removeLastVertex() { const markers = this._markers; // if all markers are gone, cancel drawing From 68ce5f81512265bdca92b7ad038b2e54fd5c1abf Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 16:48:09 +0100 Subject: [PATCH 38/41] Replace this.map with this._map --- src/js/GeomanMap.js | 42 ++++++++++++++--------------- src/js/Mixins/Events.js | 20 +++++++------- src/js/Mixins/Keyboard.js | 6 ++--- src/js/Mixins/Modes/Mode.Drag.js | 12 ++++----- src/js/Mixins/Modes/Mode.Edit.js | 12 ++++----- src/js/Mixins/Modes/Mode.Removal.js | 18 ++++++------- src/js/Mixins/Modes/Mode.Rotate.js | 12 ++++----- src/js/Toolbar/GeomanToolbar.js | 32 +++++++++++----------- 8 files changed, 77 insertions(+), 77 deletions(-) diff --git a/src/js/GeomanMap.js b/src/js/GeomanMap.js index 2d63c411..46b73b6e 100644 --- a/src/js/GeomanMap.js +++ b/src/js/GeomanMap.js @@ -23,7 +23,7 @@ export default class GeomanMap extends Class { } initialize(map) { - this.map = map; + this._map = map; this.Draw = new Draw(map); this.Toolbar = new Toolbar(map); this.Keyboard = createKeyboardMixins(); @@ -87,7 +87,7 @@ export default class GeomanMap extends Class { } Geoman.activeLang = lang; - this.map.geoman.Toolbar.reinit(); + this._map.geoman.Toolbar.reinit(); this._fireLangChange(oldLang, lang, fallback, translations[lang]); } @@ -120,9 +120,9 @@ export default class GeomanMap extends Class { const ignore = optionsModifier.ignoreShapes || []; const mergeOptions = optionsModifier.merge || false; - this.map.geoman.Draw.shapes.forEach((shape) => { + this._map.geoman.Draw.shapes.forEach((shape) => { if (ignore.indexOf(shape) === -1) { - this.map.geoman.Draw[shape].setPathOptions(options, mergeOptions); + this._map.geoman.Draw[shape].setPathOptions(options, mergeOptions); } }); } @@ -138,44 +138,44 @@ export default class GeomanMap extends Class { // check if switched the resizeable mode for CircleMarker while drawing let reenableCircleMarker = false; if ( - this.map.geoman.Draw.CircleMarker.enabled() && - !!this.map.geoman.Draw.CircleMarker.options.resizeableCircleMarker !== + this._map.geoman.Draw.CircleMarker.enabled() && + !!this._map.geoman.Draw.CircleMarker.options.resizeableCircleMarker !== !!options.resizeableCircleMarker ) { - this.map.geoman.Draw.CircleMarker.disable(); + this._map.geoman.Draw.CircleMarker.disable(); reenableCircleMarker = true; } // check if switched the resizeable mode for Circle while drawing let reenableCircle = false; if ( - this.map.geoman.Draw.Circle.enabled() && - !!this.map.geoman.Draw.Circle.options.resizeableCircle !== + this._map.geoman.Draw.Circle.enabled() && + !!this._map.geoman.Draw.Circle.options.resizeableCircle !== !!options.resizeableCircle ) { - this.map.geoman.Draw.Circle.disable(); + this._map.geoman.Draw.Circle.disable(); reenableCircle = true; } // enable options for Drawing Shapes - this.map.geoman.Draw.shapes.forEach((shape) => { - this.map.geoman.Draw[shape].setOptions(options); + this._map.geoman.Draw.shapes.forEach((shape) => { + this._map.geoman.Draw[shape].setOptions(options); }); if (reenableCircleMarker) { - this.map.geoman.Draw.CircleMarker.enable(); + this._map.geoman.Draw.CircleMarker.enable(); } if (reenableCircle) { - this.map.geoman.Draw.Circle.enable(); + this._map.geoman.Draw.Circle.enable(); } // enable options for Editing - const layers = Utils.findLayers(this.map); + const layers = Utils.findLayers(this._map); layers.forEach((layer) => { layer.geoman.setOptions(options); }); - this.map.fire('geoman:globaloptionschanged'); + this._map.fire('geoman:globaloptionschanged'); // store options this.globalOptions = options; @@ -185,7 +185,7 @@ export default class GeomanMap extends Class { } applyGlobalOptions() { - const layers = Utils.findLayers(this.map); + const layers = Utils.findLayers(this._map); layers.forEach((layer) => { if (layer.geoman.enabled()) { layer.geoman.applyOptions(); @@ -214,7 +214,7 @@ export default class GeomanMap extends Class { } getGeomanLayers(asGroup = false) { - const layers = Utils.findLayers(this.map); + const layers = Utils.findLayers(this._map); if (!asGroup) { return layers; } @@ -227,7 +227,7 @@ export default class GeomanMap extends Class { } getGeomanDrawLayers(asGroup = false) { - const layers = Utils.findLayers(this.map).filter( + const layers = Utils.findLayers(this._map).filter( (l) => l._drawnByGeoman === true ); if (!asGroup) { @@ -246,10 +246,10 @@ export default class GeomanMap extends Class { return this.globalOptions.layerGroup && this.globalOptions.layerGroup instanceof LayerGroup ? this.globalOptions.layerGroup - : this.map; + : this._map; } _isCRSSimple() { - return this.map.options.crs === CRS.Simple; + return this._map.options.crs === CRS.Simple; } } diff --git a/src/js/Mixins/Events.js b/src/js/Mixins/Events.js index fcc3240b..e1201d37 100644 --- a/src/js/Mixins/Events.js +++ b/src/js/Mixins/Events.js @@ -565,7 +565,7 @@ const EventMixin = { customPayload = {} ) { this.__fire( - this.map, + this._map, 'geoman:langchange', { oldLang, @@ -580,11 +580,11 @@ const EventMixin = { // Fired when Drag Mode is toggled. _fireGlobalDragModeToggled(enabled, source = 'Global', customPayload = {}) { this.__fire( - this.map, + this._map, 'geoman:globaldragmodetoggled', { enabled, - map: this.map, + map: this._map, }, source, customPayload @@ -593,11 +593,11 @@ const EventMixin = { // Fired when Edit Mode is toggled. _fireGlobalEditModeToggled(enabled, source = 'Global', customPayload = {}) { this.__fire( - this.map, + this._map, 'geoman:globaleditmodetoggled', { enabled, - map: this.map, + map: this._map, }, source, customPayload @@ -610,11 +610,11 @@ const EventMixin = { customPayload = {} ) { this.__fire( - this.map, + this._map, 'geoman:globalremovalmodetoggled', { enabled, - map: this.map, + map: this._map, }, source, customPayload @@ -650,11 +650,11 @@ const EventMixin = { // Fired when Rotation Mode is toggled. _fireGlobalRotateModeToggled(source = 'Global', customPayload = {}) { this.__fire( - this.map, + this._map, 'geoman:globalrotatemodetoggled', { enabled: this.globalRotateModeEnabled(), - map: this.map, + map: this._map, }, source, customPayload @@ -684,7 +684,7 @@ const EventMixin = { customPayload = {} ) { this.__fire( - this.map, + this._map, 'geoman:keyevent', { event, diff --git a/src/js/Mixins/Keyboard.js b/src/js/Mixins/Keyboard.js index 3b052448..b7e4dc62 100644 --- a/src/js/Mixins/Keyboard.js +++ b/src/js/Mixins/Keyboard.js @@ -6,7 +6,7 @@ import { DomEvent } from 'leaflet'; const createKeyboardMixins = () => ({ _lastEvents: { keydown: undefined, keyup: undefined, current: undefined }, _initKeyListener(map) { - this.map = map; + this._map = map; DomEvent.on(document, 'keydown keyup', this._onKeyListener, this); DomEvent.on(window, 'blur', this._onBlur, this); // clean up global listeners when current map instance is destroyed @@ -21,7 +21,7 @@ const createKeyboardMixins = () => ({ // .contains only supported since IE9, if you want to use Geoman with IE8 or lower you need to implement a polyfill for .contains // with focusOn the user can add a check if the key was pressed while the user interacts with the map - if (this.map.getContainer().contains(e.target)) { + if (this._map.getContainer().contains(e.target)) { focusOn = 'map'; } @@ -29,7 +29,7 @@ const createKeyboardMixins = () => ({ this._lastEvents[e.type] = data; this._lastEvents.current = data; - this.map.geoman._fireKeyeventEvent(e, e.type, focusOn); + this._map.geoman._fireKeyeventEvent(e, e.type, focusOn); }, _onBlur(e) { e.altKey = false; diff --git a/src/js/Mixins/Modes/Mode.Drag.js b/src/js/Mixins/Modes/Mode.Drag.js index 3c39b4bf..0cae29a7 100644 --- a/src/js/Mixins/Modes/Mode.Drag.js +++ b/src/js/Mixins/Modes/Mode.Drag.js @@ -5,7 +5,7 @@ import Utils from '../../GeomanUtils'; const GlobalDragMode = { _globalDragModeEnabled: false, enableGlobalDragMode() { - const layers = Utils.findLayers(this.map); + const layers = Utils.findLayers(this._map); this._globalDragModeEnabled = true; this._addedLayersDrag = {}; @@ -25,8 +25,8 @@ const GlobalDragMode = { } // add map handler - this.map.on('layeradd', this._layerAddedDrag, this); - this.map.on('layeradd', this.throttledReInitDrag, this); + this._map.on('layeradd', this._layerAddedDrag, this); + this._map.on('layeradd', this.throttledReInitDrag, this); // toogle the button in the toolbar if this is called programatically this.Toolbar.toggleButton('dragMode', this.globalDragModeEnabled()); @@ -34,7 +34,7 @@ const GlobalDragMode = { this._fireGlobalDragModeToggled(true); }, disableGlobalDragMode() { - const layers = Utils.findLayers(this.map); + const layers = Utils.findLayers(this._map); this._globalDragModeEnabled = false; @@ -43,8 +43,8 @@ const GlobalDragMode = { }); // remove map handler - this.map.off('layeradd', this._layerAddedDrag, this); - this.map.off('layeradd', this.throttledReInitDrag, this); + this._map.off('layeradd', this._layerAddedDrag, this); + this._map.off('layeradd', this.throttledReInitDrag, this); // toogle the button in the toolbar if this is called programatically this.Toolbar.toggleButton('dragMode', this.globalDragModeEnabled()); diff --git a/src/js/Mixins/Modes/Mode.Edit.js b/src/js/Mixins/Modes/Mode.Edit.js index b7874108..c6647cef 100644 --- a/src/js/Mixins/Modes/Mode.Edit.js +++ b/src/js/Mixins/Modes/Mode.Edit.js @@ -16,7 +16,7 @@ const GlobalEditMode = { this.Toolbar.toggleButton('editMode', this.globalEditModeEnabled()); // find all layers handled by leaflet-geoman - const layers = Utils.findLayers(this.map); + const layers = Utils.findLayers(this._map); // enable all layers layers.forEach((layer) => { @@ -35,9 +35,9 @@ const GlobalEditMode = { // save the added layers into the _addedLayersEdit array, to read it later out this._addedLayersEdit = {}; - this.map.on('layeradd', this._layerAddedEdit, this); + this._map.on('layeradd', this._layerAddedEdit, this); // handle layers that are added while in edit mode - this.map.on('layeradd', this.throttledReInitEdit, this); + this._map.on('layeradd', this.throttledReInitEdit, this); // fire event this._fireGlobalEditModeToggled(true); @@ -47,7 +47,7 @@ const GlobalEditMode = { this._globalEditModeEnabled = false; // find all layers handles by leaflet-geoman - const layers = Utils.findLayers(this.map); + const layers = Utils.findLayers(this._map); // disable all layers layers.forEach((layer) => { @@ -55,8 +55,8 @@ const GlobalEditMode = { }); // cleanup layer off event - this.map.off('layeradd', this._layerAddedEdit, this); - this.map.off('layeradd', this.throttledReInitEdit, this); + this._map.off('layeradd', this._layerAddedEdit, this); + this._map.off('layeradd', this.throttledReInitEdit, this); // Set toolbar button to currect status this.Toolbar.toggleButton('editMode', this.globalEditModeEnabled()); diff --git a/src/js/Mixins/Modes/Mode.Removal.js b/src/js/Mixins/Modes/Mode.Removal.js index c5eb7ca0..4e369bb8 100644 --- a/src/js/Mixins/Modes/Mode.Removal.js +++ b/src/js/Mixins/Modes/Mode.Removal.js @@ -6,7 +6,7 @@ const GlobalRemovalMode = { enableGlobalRemovalMode() { this._globalRemovalModeEnabled = true; // handle existing layers - this.map.eachLayer((layer) => { + this._map.eachLayer((layer) => { if (this._isRelevantForRemoval(layer)) { if (layer.geoman.enabled()) { layer.geoman.disable(); @@ -25,8 +25,8 @@ const GlobalRemovalMode = { // save the added layers into the _addedLayersRemoval array, to read it later out this._addedLayersRemoval = {}; // handle layers that are added while in removal mode - this.map.on('layeradd', this._layerAddedRemoval, this); - this.map.on('layeradd', this.throttledReInitRemoval, this); + this._map.on('layeradd', this._layerAddedRemoval, this); + this._map.on('layeradd', this.throttledReInitRemoval, this); // toogle the button in the toolbar if this is called programatically this.Toolbar.toggleButton('removalMode', this.globalRemovalModeEnabled()); @@ -35,13 +35,13 @@ const GlobalRemovalMode = { }, disableGlobalRemovalMode() { this._globalRemovalModeEnabled = false; - this.map.eachLayer((layer) => { + this._map.eachLayer((layer) => { layer.off('click', this._removeLayer, this); }); // remove map handler - this.map.off('layeradd', this._layerAddedRemoval, this); - this.map.off('layeradd', this.throttledReInitRemoval, this); + this._map.off('layeradd', this._layerAddedRemoval, this); + this._map.off('layeradd', this.throttledReInitRemoval, this); // toogle the button in the toolbar if this is called programatically this.Toolbar.toggleButton('removalMode', this.globalRemovalModeEnabled()); @@ -67,14 +67,14 @@ const GlobalRemovalMode = { this._isRelevantForRemoval(layer) && !layer.geoman.dragging(); if (removeable) { - layer.removeFrom(this.map.geoman._getContainingLayer()); + layer.removeFrom(this._map.geoman._getContainingLayer()); layer.remove(); if (layer instanceof LayerGroup) { this._fireRemoveLayerGroup(layer); - this._fireRemoveLayerGroup(this.map, layer); + this._fireRemoveLayerGroup(this._map, layer); } else { layer.geoman._fireRemove(layer); - layer.geoman._fireRemove(this.map, layer); + layer.geoman._fireRemove(this._map, layer); } } }, diff --git a/src/js/Mixins/Modes/Mode.Rotate.js b/src/js/Mixins/Modes/Mode.Rotate.js index d297d244..ab108b10 100644 --- a/src/js/Mixins/Modes/Mode.Rotate.js +++ b/src/js/Mixins/Modes/Mode.Rotate.js @@ -6,7 +6,7 @@ const GlobalRotateMode = { _globalRotateModeEnabled: false, enableGlobalRotateMode() { this._globalRotateModeEnabled = true; - const layers = Utils.findLayers(this.map).filter( + const layers = Utils.findLayers(this._map).filter( (l) => l instanceof Polyline ); layers.forEach((layer) => { @@ -25,8 +25,8 @@ const GlobalRotateMode = { this._addedLayersRotate = {}; // handle layers that are added while in rotate mode - this.map.on('layeradd', this._layerAddedRotate, this); - this.map.on('layeradd', this.throttledReInitRotate, this); + this._map.on('layeradd', this._layerAddedRotate, this); + this._map.on('layeradd', this.throttledReInitRotate, this); // toogle the button in the toolbar if this is called programatically this.Toolbar.toggleButton('rotateMode', this.globalRotateModeEnabled()); @@ -34,7 +34,7 @@ const GlobalRotateMode = { }, disableGlobalRotateMode() { this._globalRotateModeEnabled = false; - const layers = Utils.findLayers(this.map).filter( + const layers = Utils.findLayers(this._map).filter( (l) => l instanceof Polyline ); layers.forEach((layer) => { @@ -42,8 +42,8 @@ const GlobalRotateMode = { }); // remove map handler - this.map.off('layeradd', this._layerAddedRotate, this); - this.map.off('layeradd', this.throttledReInitRotate, this); + this._map.off('layeradd', this._layerAddedRotate, this); + this._map.off('layeradd', this.throttledReInitRotate, this); // toogle the button in the toolbar if this is called programatically this.Toolbar.toggleButton('rotateMode', this.globalRotateModeEnabled()); diff --git a/src/js/Toolbar/GeomanToolbar.js b/src/js/Toolbar/GeomanToolbar.js index 3def1457..2f2da066 100644 --- a/src/js/Toolbar/GeomanToolbar.js +++ b/src/js/Toolbar/GeomanToolbar.js @@ -61,7 +61,7 @@ export default class Toolbar extends Class { } init(map) { - this.map = map; + this._map = map; this.buttons = {}; this.isVisible = false; @@ -226,7 +226,7 @@ export default class Toolbar extends Class { onClick: () => {}, afterClick: (ctx) => { // toggle drawing mode - this.map.geoman.Draw[ctx.button._button.jsClass].toggle(); + this._map.geoman.Draw[ctx.button._button.jsClass].toggle(); }, doToggle: true, toggleStatus: false, @@ -242,7 +242,7 @@ export default class Toolbar extends Class { onClick: () => {}, afterClick: (ctx) => { // toggle drawing mode - this.map.geoman.Draw[ctx.button._button.jsClass].toggle(); + this._map.geoman.Draw[ctx.button._button.jsClass].toggle(); }, doToggle: true, toggleStatus: false, @@ -258,7 +258,7 @@ export default class Toolbar extends Class { onClick: () => {}, afterClick: (ctx) => { // toggle drawing mode - this.map.geoman.Draw[ctx.button._button.jsClass].toggle(); + this._map.geoman.Draw[ctx.button._button.jsClass].toggle(); }, doToggle: true, toggleStatus: false, @@ -274,7 +274,7 @@ export default class Toolbar extends Class { onClick: () => {}, afterClick: (ctx) => { // toggle drawing mode - this.map.geoman.Draw[ctx.button._button.jsClass].toggle(); + this._map.geoman.Draw[ctx.button._button.jsClass].toggle(); }, doToggle: true, toggleStatus: false, @@ -291,7 +291,7 @@ export default class Toolbar extends Class { onClick: () => {}, afterClick: (ctx) => { // toggle drawing mode - this.map.geoman.Draw[ctx.button._button.jsClass].toggle(); + this._map.geoman.Draw[ctx.button._button.jsClass].toggle(); }, doToggle: true, toggleStatus: false, @@ -307,7 +307,7 @@ export default class Toolbar extends Class { onClick: () => {}, afterClick: (ctx) => { // toggle drawing mode - this.map.geoman.Draw[ctx.button._button.jsClass].toggle(); + this._map.geoman.Draw[ctx.button._button.jsClass].toggle(); }, doToggle: true, toggleStatus: false, @@ -321,7 +321,7 @@ export default class Toolbar extends Class { className: 'leaflet-geoman-control-icon leaflet-geoman-icon-edit', onClick: () => {}, afterClick: () => { - this.map.geoman.toggleGlobalEditMode(); + this._map.geoman.toggleGlobalEditMode(); }, doToggle: true, toggleStatus: false, @@ -336,7 +336,7 @@ export default class Toolbar extends Class { className: 'leaflet-geoman-control-icon leaflet-geoman-icon-drag', onClick: () => {}, afterClick: () => { - this.map.geoman.toggleGlobalDragMode(); + this._map.geoman.toggleGlobalDragMode(); }, doToggle: true, toggleStatus: false, @@ -353,7 +353,7 @@ export default class Toolbar extends Class { onClick: () => {}, afterClick: (ctx) => { // enable polygon drawing mode without snap - this.map.geoman.Draw[ctx.button._button.jsClass].toggle({ + this._map.geoman.Draw[ctx.button._button.jsClass].toggle({ allowSnapping: true, cursorMarker: true, allowSelfIntersection: false, @@ -372,7 +372,7 @@ export default class Toolbar extends Class { className: 'leaflet-geoman-control-icon leaflet-geoman-icon-delete', onClick: () => {}, afterClick: () => { - this.map.geoman.toggleGlobalRemovalMode(); + this._map.geoman.toggleGlobalRemovalMode(); }, doToggle: true, toggleStatus: false, @@ -387,7 +387,7 @@ export default class Toolbar extends Class { className: 'leaflet-geoman-control-icon leaflet-geoman-icon-rotate', onClick: () => {}, afterClick: () => { - this.map.geoman.toggleGlobalRotateMode(); + this._map.geoman.toggleGlobalRotateMode(); }, doToggle: true, toggleStatus: false, @@ -404,7 +404,7 @@ export default class Toolbar extends Class { onClick: () => {}, afterClick: (ctx) => { // toggle drawing mode - this.map.geoman.Draw[ctx.button._button.jsClass].toggle(); + this._map.geoman.Draw[ctx.button._button.jsClass].toggle(); }, doToggle: true, toggleStatus: false, @@ -481,7 +481,7 @@ export default class Toolbar extends Class { block = 'draw'; } buttons[btn].setPosition(this._getBtnPosition(block)); - buttons[btn].addTo(this.map); + buttons[btn].addTo(this._map); } } } @@ -519,7 +519,7 @@ export default class Toolbar extends Class { if (this.buttons[options.name]) { throw new TypeError('Button with this name already exists'); } - const drawInstance = this.map.geoman.Draw.createNewDrawInstance( + const drawInstance = this._map.geoman.Draw.createNewDrawInstance( options.name, instance ); @@ -676,7 +676,7 @@ export default class Toolbar extends Class { } }); - this.map.geoman.Toolbar.buttons = newbtnorder; + this._map.geoman.Toolbar.buttons = newbtnorder; this._showHideButtons(); } From 0f9934605dcf87e443ef38251801ae2de0a3cc9e Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 16:53:55 +0100 Subject: [PATCH 39/41] Draw.Rectangle now uses templineStyle instead of pathOptions while drawing --- cypress/e2e/rectangle.cy.js | 2 +- src/js/Draw/Draw.Rectangle.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cypress/e2e/rectangle.cy.js b/cypress/e2e/rectangle.cy.js index f0f14ac7..9d71bea5 100644 --- a/cypress/e2e/rectangle.cy.js +++ b/cypress/e2e/rectangle.cy.js @@ -913,7 +913,7 @@ describe('Draw Rectangle', () => { const style = { color: 'red', }; - map.geoman.setGlobalOptions({ pathOptions: style }); + map.geoman.setGlobalOptions({ templineStyle: style }); const layer = map.geoman.Draw.Rectangle._layer; expect(layer.options.color).to.eql('red'); diff --git a/src/js/Draw/Draw.Rectangle.js b/src/js/Draw/Draw.Rectangle.js index f2718b35..6dfcfc41 100644 --- a/src/js/Draw/Draw.Rectangle.js +++ b/src/js/Draw/Draw.Rectangle.js @@ -29,7 +29,7 @@ export default class GeomanDrawRectangle extends Draw { [0, 0], [0, 0], ], - this.options.pathOptions + this.options.templineStyle ); this._setPane(this._layer, 'layerPane'); this._layer._geomanTempLayer = true; @@ -333,6 +333,6 @@ export default class GeomanDrawRectangle extends Draw { } setStyle() { - this._layer?.setStyle(this.options.pathOptions); + this._layer?.setStyle(this.options.templineStyle); } } From 812873b65440e53a76a0bd89b42b3f06a76cf15d Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Sun, 2 Nov 2025 16:54:21 +0100 Subject: [PATCH 40/41] Fix allowDragging bug --- cypress/e2e/rectangle.cy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cypress/e2e/rectangle.cy.js b/cypress/e2e/rectangle.cy.js index 9d71bea5..b48e0fd9 100644 --- a/cypress/e2e/rectangle.cy.js +++ b/cypress/e2e/rectangle.cy.js @@ -60,7 +60,7 @@ describe('Draw Rectangle', () => { cy.get('@marker').then((marker) => { expect(marker._geomanTempLayer).to.equal(true); - expect(marker.options.allowDragging).to.equal(false); + expect(marker.options.draggable).to.equal(false); }); }); From 661516a6bc0252a92fbd0951fc0ba49172f34828 Mon Sep 17 00:00:00 2001 From: Florian Bischof Date: Mon, 3 Nov 2025 15:33:00 +0100 Subject: [PATCH 41/41] Fix failed tests --- cypress/e2e/globalmodes.cy.js | 12 ++++++++---- cypress/e2e/tooltips.cy.js | 8 -------- src/js/Toolbar/GeomanControl.js | 2 +- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/cypress/e2e/globalmodes.cy.js b/cypress/e2e/globalmodes.cy.js index de90065a..08711594 100644 --- a/cypress/e2e/globalmodes.cy.js +++ b/cypress/e2e/globalmodes.cy.js @@ -140,7 +140,11 @@ describe('Modes', () => { it('properly removes layers', () => { cy.toolbarButton('marker').click(); - cy.get(mapSelector).click(90, 250).click(120, 250); + cy.get(mapSelector).click(90, 250); + + cy.toolbarButton('marker').click(); + + cy.get(mapSelector).click(120, 250); cy.toolbarButton('delete').click(); @@ -287,8 +291,10 @@ describe('Modes', () => { it('re-applies removal mode onAdd', () => { cy.toolbarButton('marker').click(); + cy.get(mapSelector).click(90, 250); - cy.get(mapSelector).click(90, 250).click(120, 250); + cy.toolbarButton('marker').click(); + cy.get(mapSelector).click(120, 250); cy.toolbarButton('delete').click(); @@ -315,8 +321,6 @@ describe('Modes', () => { cy.get(mapSelector).click(90, 250); - cy.toolbarButton('marker').click(); - cy.get(mapSelector).click(90, 245); cy.hasLayers(2); diff --git a/cypress/e2e/tooltips.cy.js b/cypress/e2e/tooltips.cy.js index 12136fc2..7b28509b 100644 --- a/cypress/e2e/tooltips.cy.js +++ b/cypress/e2e/tooltips.cy.js @@ -40,10 +40,6 @@ describe('Shows Tooltips', () => { expect(el).to.have.text('Click to place marker'); }); - cy.get(mapSelector).click(290, 250); - - cy.wait(500); - cy.get('.leaflet-tooltip-bottom').then((el) => { expect(el.length).to.eq(1); expect(el).to.have.text('Click to place marker'); @@ -205,10 +201,6 @@ describe('Shows Tooltips', () => { expect(el).to.have.text('Presiona para colocar un marcador de círculo'); }); - cy.get(mapSelector).click(290, 250); - - cy.wait(500); - cy.get('.leaflet-tooltip-bottom').then((el) => { expect(el).to.have.text('Presiona para colocar un marcador de círculo'); }); diff --git a/src/js/Toolbar/GeomanControl.js b/src/js/Toolbar/GeomanControl.js index df0e9385..ffc0f744 100644 --- a/src/js/Toolbar/GeomanControl.js +++ b/src/js/Toolbar/GeomanControl.js @@ -172,7 +172,7 @@ export default class GeomanControl extends Control { text: getTranslation('actions.removeLastVertex'), title: getTranslation('actions.removeLastVertex'), onClick() { - this._map.geoman.Draw[button.jsClass]._removeLastVertex(); + this._map.geoman.Draw[button.jsClass].removeLastVertex(); }, }, finish: {