diff --git a/index.html b/index.html index fefe10d..f99b382 100644 --- a/index.html +++ b/index.html @@ -119,10 +119,10 @@
@@ -159,10 +167,15 @@ +
+
+
+ ...coming soon +
+
diff --git a/package-lock.json b/package-lock.json index 0a6bf6f..d70a4d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,9 +50,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.11.tgz", - "integrity": "sha512-BwKEkO+2a67DcFeS3RLl0Z3Gs2OvdXewuWjc1Hfokhb5eQWP9YRYH1/+VrVZvql2CfjOiNGqSAFOYt4lsqTHzg==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz", + "integrity": "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==", "dev": true }, "node_modules/@babel/core": { @@ -219,38 +219,37 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz", - "integrity": "sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", "dev": true, "dependencies": { - "@babel/types": "^7.13.0" + "@babel/types": "^7.13.12" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz", - "integrity": "sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.13.12" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz", - "integrity": "sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.12.tgz", + "integrity": "sha512-7zVQqMO3V+K4JOOj40kxiCrMf6xlQAkewBB0eu2b03OO/Q21ZutOzjpfD79A5gtE/2OWi1nv625MrDlGlkbknQ==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.0", - "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", "@babel/helper-split-export-declaration": "^7.12.13", "@babel/helper-validator-identifier": "^7.12.11", "@babel/template": "^7.12.13", "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0", - "lodash": "^4.17.19" + "@babel/types": "^7.13.12" } }, "node_modules/@babel/helper-optimise-call-expression": { @@ -280,24 +279,24 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz", - "integrity": "sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", "dev": true, "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.13.0", + "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/types": "^7.13.12" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz", - "integrity": "sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.13.12" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { @@ -365,9 +364,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.11.tgz", - "integrity": "sha512-PhuoqeHoO9fc4ffMEVk4qb/w/s2iOSWohvbHxLtxui0eBg3Lg5gN1U8wp1V1u61hOWkPQJJyJzGH6Y+grwkq8Q==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", + "integrity": "sha512-4T7Pb244rxH24yR116LAuJ+adxXXnHhZaLJjegJVKSdoNCe4x1eDBaud5YIcQFcqzsaD5BHvJw5BQ0AZapdCRw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -376,6 +375,20 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", + "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.13.12" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, "node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.13.8", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz", @@ -525,9 +538,9 @@ } }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.8.tgz", - "integrity": "sha512-hpbBwbTgd7Cz1QryvwJZRo1U0k1q8uyBmeXOSQUjdg/A2TASkhR/rz7AyqZ/kS8kbpsNA80rOYbxySBJAqmhhQ==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", + "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.13.0", @@ -1149,15 +1162,16 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.10.tgz", - "integrity": "sha512-nOsTScuoRghRtUsRr/c69d042ysfPHcu+KOB4A9aAO9eJYqrkat+LF8G1yp1HD18QiwixT2CisZTr/0b3YZPXQ==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.12.tgz", + "integrity": "sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.13.8", + "@babel/compat-data": "^7.13.12", "@babel/helper-compilation-targets": "^7.13.10", "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", "@babel/plugin-proposal-async-generator-functions": "^7.13.8", "@babel/plugin-proposal-class-properties": "^7.13.0", "@babel/plugin-proposal-dynamic-import": "^7.13.8", @@ -1168,7 +1182,7 @@ "@babel/plugin-proposal-numeric-separator": "^7.12.13", "@babel/plugin-proposal-object-rest-spread": "^7.13.8", "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", "@babel/plugin-proposal-private-methods": "^7.13.0", "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", "@babel/plugin-syntax-async-generators": "^7.8.4", @@ -1216,7 +1230,7 @@ "@babel/plugin-transform-unicode-escapes": "^7.12.13", "@babel/plugin-transform-unicode-regex": "^7.12.13", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.13.0", + "@babel/types": "^7.13.12", "babel-plugin-polyfill-corejs2": "^0.1.4", "babel-plugin-polyfill-corejs3": "^0.1.3", "babel-plugin-polyfill-regenerator": "^0.1.2", @@ -1281,9 +1295,9 @@ } }, "node_modules/@babel/types": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.0.tgz", - "integrity": "sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", + "integrity": "sha512-K4nY2xFN4QMvQwkQ+zmBDp6ANMbVNw6BbxWmYA4qNjhR9W+Lj/8ky5MEY2Me5r+B2c6/v6F53oMndG+f9s3IiA==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.12.11", @@ -2009,9 +2023,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001202", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001202.tgz", - "integrity": "sha512-ZcijQNqrcF8JNLjzvEiXqX4JUYxoZa7Pvcsd9UD8Kz4TvhTonOSNRsK+qtvpVL4l6+T1Rh4LFtLfnNWg6BGWCQ==", + "version": "1.0.30001204", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz", + "integrity": "sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ==", "dev": true }, "node_modules/caseless": { @@ -2434,9 +2448,9 @@ } }, "node_modules/css-loader/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -2611,9 +2625,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.3.690", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.690.tgz", - "integrity": "sha512-zPbaSv1c8LUKqQ+scNxJKv01RYFkVVF1xli+b+3Ty8ONujHjAMg+t/COmdZqrtnS1gT+g4hbSodHillymt1Lww==", + "version": "1.3.695", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.695.tgz", + "integrity": "sha512-lz66RliUqLHU1Ojxx1A4QUxKydjiQ79Y4dZyPobs2Dmxj5aVL2TM3KoQ2Gs7HS703Bfny+ukI3KOxwAB0xceHQ==", "dev": true }, "node_modules/emoji-regex": { @@ -4132,9 +4146,9 @@ } }, "node_modules/node-gyp/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -4678,9 +4692,9 @@ } }, "node_modules/queue-microtask": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz", - "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -4891,9 +4905,9 @@ "dev": true }, "node_modules/regjsparser": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.7.tgz", - "integrity": "sha512-ib77G0uxsA2ovgiYbCVGx4Pv3PSttAx2vIwidqQzbL2U5S4Q+j00HdSAneSBuyVcMvEnTXMjiGgB+DlXozVhpQ==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.8.tgz", + "integrity": "sha512-3weFrFQREJhJ2PW+iCGaG6TenyzNSZgsBKZ/oEf6Trme31COSeIWhHw9O6FPkuXktfx+b6Hf/5e6dKPHaROq2g==", "dev": true, "dependencies": { "jsesc": "~0.5.0" @@ -5834,9 +5848,9 @@ } }, "node_modules/terser": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.0.tgz", - "integrity": "sha512-vyqLMoqadC1uR0vywqOZzriDYzgEkNJFK4q9GeyOBHIbiECHiWLKcWfbQWAUaPfxkjDhapSlZB9f7fkMrvkVjA==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", + "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", "dev": true, "dependencies": { "commander": "^2.20.0", @@ -6211,9 +6225,9 @@ } }, "node_modules/webpack": { - "version": "5.26.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.26.3.tgz", - "integrity": "sha512-z/F2lt2N1fZqaud1B4SzjL3OW03eULThbBXQ2OX4LSrZX4N9k1A5d0Rje3zS2g887DTWyAV0KGqEf64ois2dhg==", + "version": "5.27.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.27.2.tgz", + "integrity": "sha512-brNF3N/EdvMzkaZ/Xzb8sqPn5Si3iw6meqCnmNFtcnkorZsFZCBFMa2ElpIMjx6sKWYsnUpBO2dnX+7xgj+mjg==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.0", @@ -6305,9 +6319,9 @@ } }, "node_modules/webpack-cli/node_modules/commander": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.1.0.tgz", - "integrity": "sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, "engines": { "node": ">= 10" @@ -6636,9 +6650,9 @@ } }, "@babel/compat-data": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.11.tgz", - "integrity": "sha512-BwKEkO+2a67DcFeS3RLl0Z3Gs2OvdXewuWjc1Hfokhb5eQWP9YRYH1/+VrVZvql2CfjOiNGqSAFOYt4lsqTHzg==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz", + "integrity": "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==", "dev": true }, "@babel/core": { @@ -6786,38 +6800,37 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz", - "integrity": "sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", "dev": true, "requires": { - "@babel/types": "^7.13.0" + "@babel/types": "^7.13.12" } }, "@babel/helper-module-imports": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz", - "integrity": "sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.13.12" } }, "@babel/helper-module-transforms": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz", - "integrity": "sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.12.tgz", + "integrity": "sha512-7zVQqMO3V+K4JOOj40kxiCrMf6xlQAkewBB0eu2b03OO/Q21ZutOzjpfD79A5gtE/2OWi1nv625MrDlGlkbknQ==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.0", - "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", "@babel/helper-split-export-declaration": "^7.12.13", "@babel/helper-validator-identifier": "^7.12.11", "@babel/template": "^7.12.13", "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0", - "lodash": "^4.17.19" + "@babel/types": "^7.13.12" } }, "@babel/helper-optimise-call-expression": { @@ -6847,24 +6860,24 @@ } }, "@babel/helper-replace-supers": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz", - "integrity": "sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.0", + "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/types": "^7.13.12" } }, "@babel/helper-simple-access": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz", - "integrity": "sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.13.12" } }, "@babel/helper-skip-transparent-expression-wrappers": { @@ -6932,11 +6945,22 @@ } }, "@babel/parser": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.11.tgz", - "integrity": "sha512-PhuoqeHoO9fc4ffMEVk4qb/w/s2iOSWohvbHxLtxui0eBg3Lg5gN1U8wp1V1u61hOWkPQJJyJzGH6Y+grwkq8Q==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", + "integrity": "sha512-4T7Pb244rxH24yR116LAuJ+adxXXnHhZaLJjegJVKSdoNCe4x1eDBaud5YIcQFcqzsaD5BHvJw5BQ0AZapdCRw==", "dev": true }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", + "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.13.12" + } + }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.13.8", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz", @@ -7053,9 +7077,9 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.8.tgz", - "integrity": "sha512-hpbBwbTgd7Cz1QryvwJZRo1U0k1q8uyBmeXOSQUjdg/A2TASkhR/rz7AyqZ/kS8kbpsNA80rOYbxySBJAqmhhQ==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", + "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0", @@ -7527,15 +7551,16 @@ } }, "@babel/preset-env": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.10.tgz", - "integrity": "sha512-nOsTScuoRghRtUsRr/c69d042ysfPHcu+KOB4A9aAO9eJYqrkat+LF8G1yp1HD18QiwixT2CisZTr/0b3YZPXQ==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.12.tgz", + "integrity": "sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.8", + "@babel/compat-data": "^7.13.12", "@babel/helper-compilation-targets": "^7.13.10", "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", "@babel/plugin-proposal-async-generator-functions": "^7.13.8", "@babel/plugin-proposal-class-properties": "^7.13.0", "@babel/plugin-proposal-dynamic-import": "^7.13.8", @@ -7546,7 +7571,7 @@ "@babel/plugin-proposal-numeric-separator": "^7.12.13", "@babel/plugin-proposal-object-rest-spread": "^7.13.8", "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", "@babel/plugin-proposal-private-methods": "^7.13.0", "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", "@babel/plugin-syntax-async-generators": "^7.8.4", @@ -7594,7 +7619,7 @@ "@babel/plugin-transform-unicode-escapes": "^7.12.13", "@babel/plugin-transform-unicode-regex": "^7.12.13", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.13.0", + "@babel/types": "^7.13.12", "babel-plugin-polyfill-corejs2": "^0.1.4", "babel-plugin-polyfill-corejs3": "^0.1.3", "babel-plugin-polyfill-regenerator": "^0.1.2", @@ -7653,9 +7678,9 @@ } }, "@babel/types": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.0.tgz", - "integrity": "sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA==", + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", + "integrity": "sha512-K4nY2xFN4QMvQwkQ+zmBDp6ANMbVNw6BbxWmYA4qNjhR9W+Lj/8ky5MEY2Me5r+B2c6/v6F53oMndG+f9s3IiA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.12.11", @@ -8258,9 +8283,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001202", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001202.tgz", - "integrity": "sha512-ZcijQNqrcF8JNLjzvEiXqX4JUYxoZa7Pvcsd9UD8Kz4TvhTonOSNRsK+qtvpVL4l6+T1Rh4LFtLfnNWg6BGWCQ==", + "version": "1.0.30001204", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz", + "integrity": "sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ==", "dev": true }, "caseless": { @@ -8606,9 +8631,9 @@ } }, "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -8725,9 +8750,9 @@ } }, "electron-to-chromium": { - "version": "1.3.690", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.690.tgz", - "integrity": "sha512-zPbaSv1c8LUKqQ+scNxJKv01RYFkVVF1xli+b+3Ty8ONujHjAMg+t/COmdZqrtnS1gT+g4hbSodHillymt1Lww==", + "version": "1.3.695", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.695.tgz", + "integrity": "sha512-lz66RliUqLHU1Ojxx1A4QUxKydjiQ79Y4dZyPobs2Dmxj5aVL2TM3KoQ2Gs7HS703Bfny+ukI3KOxwAB0xceHQ==", "dev": true }, "emoji-regex": { @@ -9910,9 +9935,9 @@ }, "dependencies": { "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -10310,9 +10335,9 @@ "dev": true }, "queue-microtask": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz", - "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "peer": true }, @@ -10481,9 +10506,9 @@ "dev": true }, "regjsparser": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.7.tgz", - "integrity": "sha512-ib77G0uxsA2ovgiYbCVGx4Pv3PSttAx2vIwidqQzbL2U5S4Q+j00HdSAneSBuyVcMvEnTXMjiGgB+DlXozVhpQ==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.8.tgz", + "integrity": "sha512-3weFrFQREJhJ2PW+iCGaG6TenyzNSZgsBKZ/oEf6Trme31COSeIWhHw9O6FPkuXktfx+b6Hf/5e6dKPHaROq2g==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -11219,9 +11244,9 @@ } }, "terser": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.0.tgz", - "integrity": "sha512-vyqLMoqadC1uR0vywqOZzriDYzgEkNJFK4q9GeyOBHIbiECHiWLKcWfbQWAUaPfxkjDhapSlZB9f7fkMrvkVjA==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", + "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", "dev": true, "requires": { "commander": "^2.20.0", @@ -11498,9 +11523,9 @@ } }, "webpack": { - "version": "5.26.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.26.3.tgz", - "integrity": "sha512-z/F2lt2N1fZqaud1B4SzjL3OW03eULThbBXQ2OX4LSrZX4N9k1A5d0Rje3zS2g887DTWyAV0KGqEf64ois2dhg==", + "version": "5.27.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.27.2.tgz", + "integrity": "sha512-brNF3N/EdvMzkaZ/Xzb8sqPn5Si3iw6meqCnmNFtcnkorZsFZCBFMa2ElpIMjx6sKWYsnUpBO2dnX+7xgj+mjg==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", @@ -11580,9 +11605,9 @@ }, "dependencies": { "commander": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.1.0.tgz", - "integrity": "sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true } } diff --git a/src/js/clip/Picking.js b/src/js/clip/Picking.js index fa08bb9..7532949 100644 --- a/src/js/clip/Picking.js +++ b/src/js/clip/Picking.js @@ -17,6 +17,8 @@ export class Picking { plane; touchCapable = false; isDraging = false; + enabled = true; + defaultMapCursor; constructor(size, center, simulation) { this.size = size; @@ -43,6 +45,7 @@ export class Picking { simulation.scene.add(this.plane); this.domElement = simulation.renderer.domElement; + this.defaultMapCursor = this.domElement.style.cursor; domEvent.on(this.domElement, 'mousemove', this.mouseMove, this); if (this.touchCapable == true) { domEvent.on(this.domElement, 'touchstart', this.beginDrag, this); @@ -78,7 +81,7 @@ export class Picking { } mouseMove(event) { - if (this.isDraging == true || this.simulation.selection.visible == false) { + if (this.isDraging == true || this.simulation.selection.visible == false || this.enabled == false) { return; } let point = this._getCanvasPoint(event); @@ -110,14 +113,14 @@ export class Picking { // cursor is not selecting the box this.intersected.guardian.rayOut(); this.intersected = null; - this.simulation.renderer.domElement.style.cursor = 'auto'; + this.simulation.renderer.domElement.style.cursor = this.defaultMapCursor; // this.simulation.throttledRender(); this.simulation.deferringThrottle(); } } beginDrag(event) { - if (this.simulation.selection.visible == false) { + if (this.simulation.selection.visible == false && this.enabled == false) { return; } // exit drag method, if not left mouse button was clicked @@ -225,5 +228,25 @@ export class Picking { } } + disable () { + domEvent.off(this.domElement, 'mousemove', this.mouseMove, this); + if (this.touchCapable == true) { + domEvent.off(this.domElement, 'touchstart', this.beginDrag, this); + } else { + domEvent.off(this.domElement, 'mousedown', this.beginDrag, this); + } + this.enabled = false; + } + + enable() { + domEvent.on(this.domElement, 'mousemove', this.mouseMove, this); + if (this.touchCapable == true) { + domEvent.on(this.domElement, 'touchstart', this.beginDrag, this); + } else { + domEvent.on(this.domElement, 'mousedown', this.beginDrag, this); + } + this.enabled = true; + } + } \ No newline at end of file diff --git a/src/js/controls/BoreholeControl.css b/src/js/controls/BoreholeControl.css new file mode 100644 index 0000000..a00c724 --- /dev/null +++ b/src/js/controls/BoreholeControl.css @@ -0,0 +1,51 @@ +.gba-maptool-control { + border-radius: 4px; + border: 1px solid #bbb; + box-shadow: none; + margin:0; + padding:0; + overflow:hidden; +} +.gba-maptool-control a { + background-position: 50% 50%; + margin: 0; + background-repeat: no-repeat; + display: block; + height: 30px; + width: 30px; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAdCAAAAACYz4PQAAAAAnRSTlMA/1uRIrUAAAAJcEhZcwAAFxIAABcSAWef0lIAAACLSURBVCjPzZExGQUxCINjoB5qAge1UBvdKgIN3c8ELjqjAQu89W4g8+tG/4+QAPL9zMw+H3gXd5mtKLGfTK3x/XPsDLskyR3SyFr2wKi7cwCLiAPPqcUDhwbbmfxi2thaDjpxPoFZ4+gYSjCEOpdg2DVdmPPojcxWATlodrRNgz27np029RLx9PjWPwOEKTMp8DmSAAAAAElFTkSuQmCC') /*img/drill2.png*/; + float: left; +} +.measure-enabled .gba-maptool-control a{ + background-color:skyblue; +} +#radio{ + float: left; +} + +.gba-maptool-toggle { + display: inline-block; + vertical-align: middle; +} +.gba-maptool-control input:checked + label:before { + content: '✓'; + padding-left: -2em; +} +.gba-maptool-control input[type=radio] { + display: none; +} +.gba-maptool-control input[type=radio] + label { + display: none; + line-height: 30px; + height: 30px; + width: 30px; + margin: 0; + padding: 0; + font-size: 12px; + text-align: center; + vertical-align: middle; + cursor: pointer; +} +.measure-enabled .gba-maptool-control input[type=radio] + label { + display: inline-block; +} \ No newline at end of file diff --git a/src/js/controls/BoreholeControl.js b/src/js/controls/BoreholeControl.js new file mode 100644 index 0000000..bb40060 --- /dev/null +++ b/src/js/controls/BoreholeControl.js @@ -0,0 +1,34 @@ +import { Control } from "./Control"; +import * as dom from '../core/domUtil'; +import * as util from '../core/utilities'; +import * as domEvent from '../core/domEvent'; +import { BoreholeTool } from '../tools/BoreholeTool'; + +import './BoreholeControl.css'; + +export class BoreholeControl extends Control { + + onAdd (map) { + this.map = map; + + // var b = this._nls = util.mixin({}, N.widgets.boreholetool); + this._container = dom.createDom("div", { "class": 'gba-maptool-control gba-control' }); + //new L.Measurable(map); + let mapTool = new BoreholeTool(this.map); + + //var inputDiv = dom.createDom("div", { id: "radio" }, this._container); + //this.addUnit(inputDiv, 'km', 'km', 'kilometers', true); + //this.addUnit(inputDiv, 'mi', 'mi', 'miles'); + ////this.addUnit(inputDiv, 'nm', 'NM', 'nautical miles'); + let toggle = dom.createDom('a', { "class": "gba-maptool-toggle", href: "#", title: "b.title" }, this._container); + + domEvent.disableClickPropagation(this._container); + domEvent + // .on(toggle, 'click', domEvent.stop) + // .on(toggle, 'click', domEvent.preventDefault) + .on(toggle, 'click', mapTool.toggle, mapTool); + + return this._container; + } + +} \ No newline at end of file diff --git a/src/js/core/BaseEditor.js b/src/js/core/BaseEditor.js new file mode 100644 index 0000000..7abbe1e --- /dev/null +++ b/src/js/core/BaseEditor.js @@ -0,0 +1,150 @@ +import * as util from './utilities'; + +var Editable = { + + makeCancellable: function (e) { + e.cancel = function () { + e._cancelled = true; + }; + } +}; + +export class BaseEditor { + + map; + marker; + mapTool; + + + constructor(map, featureLayer, options = {}) { + util.setOptions(this, options); + this.map = map; + this.marker = featureLayer; + this.marker.editor = this; + //this.editLayer = new LayerGroup(); + this.mapTool = map.mapTool; //this.options.editTools || map.mapTool; + + // this.marker.bindPopup(map._controls.boreholePopup); + } + + enable() { + if (this._enabled) return this; + //if (this.isConnected() == true) { + // this.mapTool.editLayer.addLayer(this.editLayer); + //} + this.onEnable(); + this._enabled = true; + this.marker.on('remove', this.disable.bind(this)); + return this; + } + + disable() { + this.marker.off('remove', this.disable.bind(this)); + //this.editLayer.clearLayers(); + //this.mapTool.editLayer.removeLayer(this.editLayer); + this.onDisable(); + delete this._enabled; + if (this._drawing) this.cancelDrawing(); + return this; + } + + isConnected() { + return this.map.hasLayer(this.marker); + } + + drawing() { + return !!this._drawing; + } + + fireAndForward(type, e) { + e = e || {}; + e.layer = this.marker; + this.marker.emit(type, e); + this.mapTool.fireAndForward(type, e); + } + + onEnable() { + this.fireAndForward('editable:enable'); + } + + onDisable() { + this.fireAndForward('editable:disable'); + } + + onEditing() { + this.fireAndForward('editable:editing'); + } + + + onDrawingMouseDown(e) { + this.fireAndForward('editable:drawing:mousedown', e); + } + + + startDrawing() { + if (!this._drawing) { + this._drawing = 1;// L.Editable.FORWARD; + } + this.mapTool.registerForDrawing(this); + this._onStartDrawing(); + } + + _onStartDrawing() { + this.fireAndForward('editable:drawing:start'); + } + + + onDrawingClick(e) { + if (!this.drawing) return; + Editable.makeCancellable(e); + this.fireAndForward('editable:drawing:click', e); + if (e._cancelled) return; + //if (!this.isConnected()) { + // this.connect(e); + //} + var dxfIdentifyParams = {}; + dxfIdentifyParams.clientX = e.clientX; + dxfIdentifyParams.clientY = e.clientY; + dxfIdentifyParams.width = this.map.container.clientWidth; + dxfIdentifyParams.height = this.map.container.clientHeight; + // var deferred = this.mapTool.drillTask.execute(dxfIdentifyParams); + // deferred.then(this.handleQueryResults3.bind(this)); + + this._processDrawingClick(e); + } + + _processDrawingClick (e) { + this.fireAndForward('editable:drawing:clicked', e); + this._commitDrawing(e); + } + + _commitDrawing (e) { + this._onCommitDrawing(e); + } + + _onCommitDrawing(e) { + this.fireAndForward('editable:drawing:commit', e); + } + + + + + cancelDrawing() { + this._onCancelDrawing(); + this._endDrawing(); + } + + _onCancelDrawing () { + this.fireAndForward('editable:drawing:cancel'); + } + + _endDrawing () { + this._drawing = false; + this.mapTool.unregisterForDrawing(this); + this._onEndDrawing(); + } + + _onEndDrawing() { + this.fireAndForward('editable:drawing:end'); + } +} \ No newline at end of file diff --git a/src/js/core/Map.js b/src/js/core/Map.js index c64c860..ecbab4b 100644 --- a/src/js/core/Map.js +++ b/src/js/core/Map.js @@ -2,6 +2,7 @@ import { OrbitControls } from '../lib/OrbitControls'; import * as dom from './domUtil'; import { HomeButton } from '../controls/HomeButton'; import { ZoomControl } from '../controls/ZoomControl'; +import { BoreholeControl } from '../controls/BoreholeControl'; import * as util from './utilities'; import { TinLayer } from '../layer/TinLayer'; @@ -125,6 +126,8 @@ class Map extends OrbitControls { let zoomControl = this._controls.zoomControl = new ZoomControl(); zoomControl.addTo(this); + + this._controls.maptoolControl = new BoreholeControl().addTo(this); } async addLayer(layer) { @@ -150,6 +153,10 @@ class Map extends OrbitControls { return !!layer && (util.stamp(layer) in this._layers); } + getCenter () { // (Boolean) -> LatLng + return this.target; + } + } export { Map }; \ No newline at end of file diff --git a/src/js/core/domUtil.js b/src/js/core/domUtil.js index 6aec6fd..d8602ca 100644 --- a/src/js/core/domUtil.js +++ b/src/js/core/domUtil.js @@ -86,6 +86,17 @@ export function setProperties(element, properties) { } } + +// @function hasClass(el: HTMLElement, name: String): Boolean +// Returns `true` if the element's class attribute contains `name`. +export function hasClass(el, name) { + if (el.classList !== undefined) { + return el.classList.contains(name); + } + var className = getClass(el); + return className.length > 0 && new RegExp('(^|\\s)' + name + '(\\s|$)').test(className); +} + // @function addClass(el: HTMLElement, name: String) // Adds `name` to the element's class attribute. export function addClass(el, name) { diff --git a/src/js/layer/Layer.js b/src/js/layer/Layer.js index 2365e66..5026537 100644 --- a/src/js/layer/Layer.js +++ b/src/js/layer/Layer.js @@ -41,7 +41,58 @@ class Layer extends EventEmitter { getScene() { return this._map.scene; } - + + // @method bindPopup(content: String|HTMLElement|Function|Popup, options?: Popup options): this + // Binds a popup to the layer with the passed `content` and sets up the + // neccessary event listeners. If a `Function` is passed it will receive + // the layer as the first argument and should return a `String` or `HTMLElement`. + bindPopup(content) { + + if (content instanceof BoreholePopup) { + //util.setOptions(content, options); + this._popup = content; + content._source = this; + } + + if (!this._popup) { + //this._popup = new L.Popup(options, this); + this._popup = new BoreholePopup({}, this); + this._popup.addTo(this._map); + this._popup.setChartContent(content); + } + + + + if (!this._popupHandlersAdded) { + this.on("click", this.openPopup, this); //remove: this.closePopup //move: this._movePopup + this.on('remove', this.closePopup, this); + this._popupHandlersAdded = true; + } + + //// save the originally passed offset + //this._originalPopupOffset = this._popup.options.offset; + + return this; + } + + setPopupChartData(content) { + this._popup.setChartContent(content); + } + + openPopup() { + this._popup.show(); + } + + // @method closePopup(): this + // Closes the popup bound to this layer if it is open. + closePopup() { + if (this._popup) { + this._popup._close(); + //this._popup.removeFrom(this._map); + } + return this; + } + } export { Layer }; \ No newline at end of file diff --git a/src/js/layer/MarkerLayer.js b/src/js/layer/MarkerLayer.js new file mode 100644 index 0000000..5404f88 --- /dev/null +++ b/src/js/layer/MarkerLayer.js @@ -0,0 +1,131 @@ +import { Layer } from './Layer'; +import * as util from '../core/utilities'; +import { BaseEditor } from '../core/BaseEditor'; + +export class MarkerLayer extends Layer { + + createEditor(map) { + map = map || this._map; + var Klass = this.options.editorClass || this.getEditorClass(map); + return new Klass(map, this, this.options.editOptions); + } + + enableEdit(map) { + if (!this.editor) { + this.createEditor(map); + } + return this.editor.enable(); + } + + getEditorClass(map) { + return BaseEditor; + } + + options = { + pane: 'markerPane', + nonBubblingEvents: ['click', 'dblclick', 'mouseover', 'mouseout', 'contextmenu'], + //icon: new L.Icon.Default(), + opacity: 1, + clickable: true, + }; + + constructor(latlng, options) { + super(); + util.setOptions(this, options); + this._latlng = latlng; + + } + + onAdd(map) { + //this._zoomAnimated = this._zoomAnimated && map.options.markerZoomAnimation; + + this._initIcon(); + this.update(); + this.emit('add'); + } + + onRemove() { + //if (this.dragging && this.dragging.enabled()) { + // this.options.draggable = true; + // this.dragging.removeHooks(); + //} + + this._removeIcon(); + //this._removeShadow(); + this.emit('remove'); + this._map = null; + } + + update() { + if (this._icon) { + var pos = this._latlng; + this._setPos(pos); + } + this._map.emit("change"); + return this; + } + + getElement() { + return this._icon; + } + + _initIcon() { + //create default icon + var opt = { r: 0.25, c: 0xffff00, o: 0.8 }; + var icon = new THREE.Mesh(new THREE.CylinderGeometry(0, 0.5, 2), + new THREE.MeshLambertMaterial({ color: 0x38eeff, opacity: opt.o, transparent: (opt.o < 1) })); + icon.rotation.x = THREE.Math.degToRad(-90); + icon.visible = true; + //app.scene.add(app.boreholeMarker); + var addIcon = false; + + // if we're not reusing the icon, remove the old one and init new one + if (icon !== this._icon) { + if (this._icon) { + this._removeIcon(); + } + addIcon = true; + + //if (options.title) { + // icon.title = options.title; + //} + //if (options.alt) { + // icon.alt = options.alt; + //} + } + this._icon = icon; + + //this._initInteraction(); + + if (addIcon === true) { + this.getPane().add(this._icon); + } + } + + _removeIcon() { + //if (this.options.riseOnHover) { + // this.off({ + // mouseover: this._bringToFront, + // mouseout: this._resetZIndex + // }); + //} + + //L.DomUtil.remove(this._icon); + this.getPane().remove(this._icon); + //this.removeInteractiveTarget(this._icon); + + this._icon = null; + } + + _setPos(pos) { + //L.DomUtil.setPosition(this._icon, pos); + this._icon.position.set(pos.x, pos.y, pos.z); + + } + + setLatLng(latlng) { + this._latlng = latlng; + this.update(); + } + +} \ No newline at end of file diff --git a/src/js/main.js b/src/js/main.js index 472ac1e..1346641 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -13,7 +13,6 @@ import { NorthArrow } from './controls/NorthArrow'; import { LayerControl } from './controls/LayerControl'; import { BasemapControl } from './controls/BasemapControl'; import { SliderControl } from './controls/SliderControl'; -// import { SlicerControl } from './controls/SlicerControl'; import { Mesh } from 'three/src/objects/Mesh'; import { SphereGeometry } from 'three/src/geometries/SphereGeometry'; import { MeshLambertMaterial } from 'three/src/materials/MeshLambertMaterial'; @@ -196,7 +195,7 @@ class Application { ); this.map.addLayer(this.selection); - new Picking(size, center, this); + this.map.picking = new Picking(size, center, this); // let boxLayer = new BoxLayer({ diff --git a/src/js/tools/BoreholeTool.js b/src/js/tools/BoreholeTool.js new file mode 100644 index 0000000..ab73a57 --- /dev/null +++ b/src/js/tools/BoreholeTool.js @@ -0,0 +1,185 @@ +import { EventEmitter } from '../core/EventEmitter'; +import { MeshLambertMaterial } from 'three/src/materials/MeshLambertMaterial'; +import * as domEvent from '../core/domEvent'; +import { MarkerLayer } from '../layer/MarkerLayer'; +import * as dom from '../core/domUtil'; +import * as util from '../core/utilities'; + +export class BoreholeTool extends EventEmitter { + + options = { + zIndex: 1000, + markerClass: MarkerLayer,//THREE.CylinderGeometry, + drawingCSSClass: 'gba-editable-drawing', + drawingCursor: 'crosshair' + }; + + constructor(map, options = {}) { + super(); + + util.setOptions(this, options); + this._lastZIndex = this.options.zIndex; + this.map = map; + // this.featuresLayer = this._createFeaturesLayer(); + //this.forwardLineGuide = this.createLineGuide(); + //this.backwardLineGuide = this.createLineGuide(); + + this.map.mapTool = this; + //this.on('editable:drawing:end', function () { + // if (this.enabled()) this.startMarker(); + //}); + + let highlightMaterial = new MeshLambertMaterial({ emissive: 0x999900, transparent: true, opacity: 0.5 }); + this.defaultMapCursor = this.map.domElement.style.cursor; + } + + // _createFeaturesLayer () { + // return new LayerGroup().addTo(this.map); + // } + + enabled() { + return dom.hasClass(this.map.container, 'measure-enabled'); + } + + toggle() { + if (this.enabled()) { + this.disable(); + } + else { + this.enable(); + } + } + + enable() { + //if (this.map.mapTool) this.map.mapTool.on('editable:drawing:start', this.disable.bind(this)); + dom.addClass(this.map.container, 'measure-enabled'); + //this.fireAndForward('showmeasure'); + this._startMarker(); + } + + disable() { + //if (this.map.mapTool) this.map.mapTool.off('editable:drawing:start', this.disable.bind(this)); + dom.removeClass(this.map.container, 'measure-enabled'); + // this.featuresLayer.clearLayers(); + //this.fireAndForward('hidemeasure'); + if (this._drawingEditor) { + this._drawingEditor.cancelDrawing(); + } + } + + fireAndForward(type, e) { + e = e || {}; + e.mapTool = this; + this.emit(type, e); + this.map.emit(type, e); + } + + _startMarker(latlng, options) { + latlng = latlng || this.map.getCenter().clone(); + let markerLayer = this._createMarker(latlng, options);//.addTo(this.map); + //this.map.addLayer(marker); + //marker.enableEdit(this.map).startDrawing(); //editor.startDrawing() -> registerForDrawing + let baseEditor = markerLayer.enableEdit(this.map); + baseEditor.startDrawing(); + return markerLayer; + } + + _createMarker(latlng, options) { + return this._createLayer(options && options.markerClass || this.options.markerClass, latlng, options); + } + + _createLayer(klass, latlngs, options) { + options = util.extend({ editOptions: { mapTool: this } }, options); + let layer = new klass(latlngs, options); + //this.fireAndForward('editable:created', { layer: layer }); + return layer; + } + + + registerForDrawing(editor) { + if (this._drawingEditor) { + this.unregisterForDrawing(this._drawingEditor); + } + //this.map.on('mousemove touchmove', editor.onDrawingMouseMove, editor); + this._blockEvents(); + this._drawingEditor = editor; + this.map.on('mousedown', this._onMousedown); + this.map.on('clicked', this._onMouseup); + dom.addClass(this.map.domElement, this.options.drawingCSSClass); + // this.defaultMapCursor = this.map.domElement.style.cursor; + //this.map.domElement.style.cursor = this.options.drawingCursor; + // this.map.domElement.style.cursor = "crosshair"; + this.map.domElement.style.cursor = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAdCAMAAABRwYYcAAABPlBMVEUAAAC7u7vQ0NCTk5PU1NTr6+u6urpVVVXR0dEhISG8vLxISEjS0tL09PTo6OiEhISlpaX39/cAAABNTU2mpqZRUVH4+Phzc3NOTk75+fmBgYHu7u7CwsKdnZ1cXFzQ0NAvLy8FBQXb29v9/f0rKysJCQmFhYVlZWUyMjLa2tr///96enoMDAyJiYkXFxcZGRkLCwtZWVl/f38aGhqrq6vV1dXj4+N5eXnb29vd3d1FRUXR0dG5ubnQ0NCCgoKVlZWNjY1BQUHt7e0GBgYAAAC3t7ctLS2/v783NzcfHx/r6+uUlJSkpKQCAgKoqKh8fHyAgIAsLCynp6cHBwddXV0yMjIXFxfOzs4+Pj7g4OCioqITExOfn58BAQEbGxsxMTGTk5PPz8+QkJAICAi4uLjf39+zs7O+vr5LS0uLi4svZJaIAAAATHRSTlMA7uD+DN/YA9/Y/tjfye4Z9Mn+/vTuydj+yfTmFRULC+7+38nY/hUZ/uDJ2P7+C/7Y2BT+/tjJFeD8C+AL3/702O7f/gPu/hTY7uDuXbwlLQAAAKxJREFUeF6VzWVyAmEMBuCwuLu7lsW9uBWqK7i7tb3/BcjHDciPPJPJmwnUBb8KCQBQ/OXWtAOUTVLtSg9Qe8JNCdW5jiEACHDLYTSGDhZvSpyrHTZhRen1mCuoAcS7nwi5oxy9l38L+Zfj3zGvYk4GOeY8ZjacRb+nW2MbFc98bpJv/GleiXTrY24LAshG13wG993D3v+Jpr7YdPxxd2aSmPP2J8IiYIkqTux3Y8Yeb6YtyDkAAAAASUVORK5CYII=') 3 31, crosshair"; + //background-image:url(/content/img/drill.png); + } + + unregisterForDrawing(editor) { + this._unblockEvents(); + dom.removeClass(this.map.domElement, this.options.drawingCSSClass); + this.map.domElement.style.cursor = this.defaultMapCursor; + editor = editor || this._drawingEditor; + if (!editor) return; + //this.map.off('mousemove touchmove', editor.onDrawingMouseMove, editor); + this.map.off('mousedown', this._onMousedown); + this.map.off('clicked', this._onMouseup); + if (editor !== this._drawingEditor) return; + delete this._drawingEditor; + //if (editor._drawing) { + // editor.cancelDrawing(); + //} + } + + _blockEvents() { + // Hack: force map not to listen to other layers events while drawing. + //if (!this._oldTargets) { + //this._oldTargets = this.map._events; + //this.map._events = {}; + //} + if (!this._oldClickTargets) { + this._oldClickTargets = this.map._events.clicked; + this.map._events.clicked = []; + } + if (this.map.picking) { + this.map.picking.disable(); + } + } + + _unblockEvents() { + //if (this._oldTargets) { + // // Reset, but keep targets created while drawing. + // this.map._events = util.extend(this.map._events, this._oldTargets); + // delete this._oldTargets; + //} + if (this._oldClickTargets) { + // Reset, but keep targets created while drawing. + this.map._events.clicked = this.map._events.clicked.concat(this._oldClickTargets); + delete this._oldClickTargets; + } + if (this.map.picking) { + this.map.picking.enable(); + } + } + + _onMousedown(e) { + //var canvasOffset = $(this.domElement).offset(); + //var xClickedOnCanvas = e.clientX - canvasOffset.left; + //var yClickedonCanvas = e.clientY - canvasOffset.top; + //var event = { x: xClickedOnCanvas, y: yClickedonCanvas }; + this.mapTool._mouseDown = e; + this.mapTool._drawingEditor.onDrawingMouseDown(e); + } + + _onMouseup(e) { + if (this.mapTool._mouseDown) { + //var originPoint = new Point(this.mapTool._mouseDown.clientX, this.mapTool._mouseDown.clientY); + //var endPoint = new Point(e.clientX, e.clientY); + //var distance = endPoint.distanceTo(originPoint); + //if (Math.abs(distance) < 9 * (window.devicePixelRatio || 1)) this.mapTool._drawingEditor.onDrawingClick(e); + //else this._drawingEditor.onDrawingMouseUp(e); + this.mapTool._drawingEditor.onDrawingClick(this.mapTool._mouseDown); + } + this.mapTool._mouseDown = null; + } + + +} \ No newline at end of file