From 50daeebd7e3b25029d411b25e96952a8834d0887 Mon Sep 17 00:00:00 2001 From: Arno Kaimbacher Date: Mon, 18 Jan 2021 11:51:07 +0100 Subject: [PATCH] - new DemLayer.js and DemBlock.js classes for BaseLayer - MobileDialog.js and BasemapControl.js controls for selecting esir baselayers - npm updates - browser.js: new function for testing if browser is IE - Modifications in BoxLayer.js (for scaling and setting visibility) - modifications in main.js_ for showing projected and unprojected data --- .../basemap/background_esri_world_imagery.png | Bin 0 -> 18939 bytes .../background_esri_world_topography.png | Bin 0 -> 17354 bytes index.html | 2 +- package-lock.json | 679 +++++++++--------- src/js/controls/BasemapControl.css | 24 + src/js/controls/BasemapControl.js | 112 +++ src/js/controls/Coordinates.js | 3 +- src/js/controls/MobileDialog.css | 155 ++++ src/js/controls/MobileDialog.js | 118 +++ src/js/core/Map.js | 10 +- src/js/core/browser.js | 5 +- src/js/layer/BoxLayer.js | 34 +- src/js/layer/DemBlock.js | 208 ++++++ src/js/layer/DemLayer.js | 336 +++++++++ src/js/layer/TinLayer.js | 2 +- src/js/lib/OrbitControls.js | 5 +- src/js/main.js | 94 ++- 17 files changed, 1446 insertions(+), 341 deletions(-) create mode 100644 images/basemap/background_esri_world_imagery.png create mode 100644 images/basemap/background_esri_world_topography.png create mode 100644 src/js/controls/BasemapControl.css create mode 100644 src/js/controls/BasemapControl.js create mode 100644 src/js/controls/MobileDialog.css create mode 100644 src/js/controls/MobileDialog.js create mode 100644 src/js/layer/DemBlock.js create mode 100644 src/js/layer/DemLayer.js diff --git a/images/basemap/background_esri_world_imagery.png b/images/basemap/background_esri_world_imagery.png new file mode 100644 index 0000000000000000000000000000000000000000..63ff4333e9849c150162dee07e5f20740f14fe7d GIT binary patch literal 18939 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 diff --git a/package-lock.json b/package-lock.json index 95a9be0..02c6cfa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1347,177 +1347,148 @@ "dev": true }, "node_modules/@webassemblyjs/ast": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.1.tgz", - "integrity": "sha512-uMu1nCWn2Wxyy126LlGqRVlhdTOsO/bsBRI4dNq3+6SiSuRKRQX6ejjKgh82LoGAPSq72lDUiQ4FWVaf0PecYw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", + "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", "dev": true, "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.1", - "@webassemblyjs/helper-wasm-bytecode": "1.9.1", - "@webassemblyjs/wast-parser": "1.9.1" + "@webassemblyjs/helper-numbers": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.1.tgz", - "integrity": "sha512-5VEKu024RySmLKTTBl9q1eO/2K5jk9ZS+2HXDBLA9s9p5IjkaXxWiDb/+b7wSQp6FRdLaH1IVGIfOex58Na2pg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", + "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.1.tgz", - "integrity": "sha512-y1lGmfm38djrScwpeL37rRR9f1D6sM8RhMpvM7CYLzOlHVboouZokXK/G88BpzW0NQBSvCCOnW5BFhten4FPfA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", + "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.1.tgz", - "integrity": "sha512-uS6VSgieHbk/m4GSkMU5cqe/5TekdCzQso4revCIEQ3vpGZgqSSExi4jWpTWwDpAHOIAb1Jfrs0gUB9AA4n71w==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", + "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", "dev": true }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.1.tgz", - "integrity": "sha512-ZQ2ZT6Evk4DPIfD+92AraGYaFIqGm4U20e7FpXwl7WUo2Pn1mZ1v8VGH8i+Y++IQpxPbQo/UyG0Khs7eInskzA==", + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", + "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", "dev": true, "dependencies": { - "@webassemblyjs/wast-printer": "1.9.1" - } - }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.1.tgz", - "integrity": "sha512-J32HGpveEqqcKFS0YbgicB0zAlpfIxJa5MjxDxhu3i5ltPcVfY5EPvKQ1suRguFPehxiUs+/hfkwPEXom/l0lw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.1.tgz", - "integrity": "sha512-IEH2cMmEQKt7fqelLWB5e/cMdZXf2rST1JIrzWmf4XBt3QTxGdnnLvV4DYoN8pJjOx0VYXsWg+yF16MmJtolZg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.1" + "@webassemblyjs/floating-point-hex-parser": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.1.tgz", - "integrity": "sha512-i2rGTBqFUcSXxyjt2K4vm/3kkHwyzG6o427iCjcIKjOqpWH8SEem+xe82jUk1iydJO250/CvE5o7hzNAMZf0dQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", + "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.1.tgz", - "integrity": "sha512-FetqzjtXZr2d57IECK+aId3D0IcGweeM0CbAnJHkYJkcRTHP+YcMb7Wmc0j21h5UWBpwYGb9dSkK/93SRCTrGg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", + "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-buffer": "1.9.1", - "@webassemblyjs/helper-wasm-bytecode": "1.9.1", - "@webassemblyjs/wasm-gen": "1.9.1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.1.tgz", - "integrity": "sha512-EvTG9M78zP1MmkBpUjGQHZc26DzPGZSLIPxYHCjQsBMo60Qy2W34qf8z0exRDtxBbRIoiKa5dFyWer/7r1aaSQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", + "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.1.tgz", - "integrity": "sha512-Oc04ub0vFfLnF+2/+ki3AE+anmW4sv9uNBqb+79fgTaPv6xJsOT0dhphNfL3FrME84CbX/D1T9XT8tjFo0IIiw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", + "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.1.tgz", - "integrity": "sha512-llkYtppagjCodFjo0alWOUhAkfOiQPQDIc5oA6C9sFAXz7vC9QhZf/f8ijQIX+A9ToM3c9Pq85X0EX7nx9gVhg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", + "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.1.tgz", - "integrity": "sha512-S2IaD6+x9B2Xi8BCT0eGsrXXd8UxAh2LVJpg1ZMtHXnrDcsTtIX2bDjHi40Hio6Lc62dWHmKdvksI+MClCYbbw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", + "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-buffer": "1.9.1", - "@webassemblyjs/helper-wasm-bytecode": "1.9.1", - "@webassemblyjs/helper-wasm-section": "1.9.1", - "@webassemblyjs/wasm-gen": "1.9.1", - "@webassemblyjs/wasm-opt": "1.9.1", - "@webassemblyjs/wasm-parser": "1.9.1", - "@webassemblyjs/wast-printer": "1.9.1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/helper-wasm-section": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-opt": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "@webassemblyjs/wast-printer": "1.11.0" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.1.tgz", - "integrity": "sha512-bqWI0S4lBQsEN5FTZ35vYzfKUJvtjNnBobB1agCALH30xNk1LToZ7Z8eiaR/Z5iVECTlBndoRQV3F6mbEqE/fg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", + "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-wasm-bytecode": "1.9.1", - "@webassemblyjs/ieee754": "1.9.1", - "@webassemblyjs/leb128": "1.9.1", - "@webassemblyjs/utf8": "1.9.1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.1.tgz", - "integrity": "sha512-gSf7I7YWVXZ5c6XqTEqkZjVs8K1kc1k57vsB6KBQscSagDNbAdxt6MwuJoMjsE1yWY1tsuL+pga268A6u+Fdkg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", + "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-buffer": "1.9.1", - "@webassemblyjs/wasm-gen": "1.9.1", - "@webassemblyjs/wasm-parser": "1.9.1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.1.tgz", - "integrity": "sha512-ImM4N2T1MEIond0MyE3rXvStVxEmivQrDKf/ggfh5pP6EHu3lL/YTAoSrR7shrbKNPpeKpGesW1LIK/L4kqduw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", + "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-api-error": "1.9.1", - "@webassemblyjs/helper-wasm-bytecode": "1.9.1", - "@webassemblyjs/ieee754": "1.9.1", - "@webassemblyjs/leb128": "1.9.1", - "@webassemblyjs/utf8": "1.9.1" - } - }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.1.tgz", - "integrity": "sha512-2xVxejXSvj3ls/o2TR/zI6p28qsGupjHhnHL6URULQRcXmryn3w7G83jQMcT7PHqUfyle65fZtWLukfdLdE7qw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/floating-point-hex-parser": "1.9.1", - "@webassemblyjs/helper-api-error": "1.9.1", - "@webassemblyjs/helper-code-frame": "1.9.1", - "@webassemblyjs/helper-fsm": "1.9.1", - "@xtuc/long": "4.2.2" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.1.tgz", - "integrity": "sha512-tDV8V15wm7mmbAH6XvQRU1X+oPGmeOzYsd6h7hlRLz6QpV4Ec/KKxM8OpLtFmQPLCreGxTp+HuxtH4pRIZyL9w==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", + "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/wast-parser": "1.9.1", + "@webassemblyjs/ast": "1.11.0", "@xtuc/long": "4.2.2" } }, @@ -1705,16 +1676,16 @@ } }, "node_modules/browserslist": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.0.tgz", - "integrity": "sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.1.tgz", + "integrity": "sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA==", "dev": true, "dependencies": { - "caniuse-lite": "^1.0.30001165", + "caniuse-lite": "^1.0.30001173", "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.621", + "electron-to-chromium": "^1.3.634", "escalade": "^3.1.1", - "node-releases": "^1.1.67" + "node-releases": "^1.1.69" }, "bin": { "browserslist": "cli.js" @@ -1734,13 +1705,13 @@ "dev": true }, "node_modules/call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.1.tgz", + "integrity": "sha512-tvAvUwNcRikl3RVF20X9lsYmmepsovzTWeJiXjO0PkJp15uy/6xKFZOQtuiSULwYW+6ToZBprphCgWXC2dSgcQ==", "dev": true, "dependencies": { "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" + "get-intrinsic": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1759,9 +1730,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001173", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001173.tgz", - "integrity": "sha512-R3aqmjrICdGCTAnSXtNyvWYMK3YtV5jwudbq0T7nN9k4kmE4CBuwPqyJ+KBzepSTh0huivV2gLbSMEzTTmfeYw==", + "version": "1.0.30001174", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001174.tgz", + "integrity": "sha512-tqClL/4ThQq6cfFXH3oJL4rifFBeM6gTkphjao5kgwMaW9yn0tKgQLAEfKzDwj6HQWCB/aWo8kTFlSvIN8geEA==", "dev": true }, "node_modules/chalk": { @@ -2109,9 +2080,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.3.634", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.634.tgz", - "integrity": "sha512-QPrWNYeE/A0xRvl/QP3E0nkaEvYUvH3gM04ZWYtIa6QlSpEetRlRI1xvQ7hiMIySHHEV+mwDSX8Kj4YZY6ZQAw==", + "version": "1.3.635", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.635.tgz", + "integrity": "sha512-RRriZOLs9CpW6KTLmgBqyUdnY0QNqqWs0HOtuQGGEMizOTNNn1P7sGRBxARnUeLejOsgwjDyRqT3E/CSst02ZQ==", "dev": true }, "node_modules/emoji-regex": { @@ -2622,6 +2593,20 @@ "node": ">=10.17.0" } }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", @@ -2950,9 +2935,9 @@ } }, "node_modules/less": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/less/-/less-4.0.0.tgz", - "integrity": "sha512-av1eEa2D0xZfF7fjLJS/Dld7zAYSLU7EOEJvuOELeaNI3i6L/81AdjbK5/pytaRkBwi7ZEa0433IDvMLskKCOw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.0.tgz", + "integrity": "sha512-w1Ag/f34g7LwtQ/sMVSGWIyZx+gG9ZOAEtyxeX1fG75is6BMyC2lD5kG+1RueX7PkAvlQBm2Lf2aN2j0JbVr2A==", "dev": true, "peer": true, "dependencies": { @@ -2962,7 +2947,7 @@ "image-size": "~0.5.0", "make-dir": "^2.1.0", "mime": "^1.4.1", - "native-request": "^1.0.5", + "needle": "^2.5.2", "parse-node-version": "^1.0.1", "source-map": "~0.6.0", "tslib": "^1.10.0" @@ -2979,7 +2964,7 @@ "image-size": "~0.5.0", "make-dir": "^2.1.0", "mime": "^1.4.1", - "native-request": "^1.0.5", + "needle": "^2.5.2", "source-map": "~0.6.0" } }, @@ -3075,9 +3060,9 @@ } }, "node_modules/loader-runner": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.1.0.tgz", - "integrity": "sha512-oR4lB4WvwFoC70ocraKhn5nkKSs23t57h9udUgw8o0iH8hMXeEoRuUgfcvgUwAJ1ZpRqBvcou4N2SMvM1DwMrA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", "dev": true, "engines": { "node": ">=6.11.5" @@ -3332,13 +3317,35 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/native-request": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.0.8.tgz", - "integrity": "sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag==", + "node_modules/needle": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", + "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", "dev": true, "optional": true, - "peer": true + "peer": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } }, "node_modules/neo-async": { "version": "2.6.2", @@ -3584,9 +3591,9 @@ } }, "node_modules/postcss": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.2.tgz", - "integrity": "sha512-HM1NDNWLgglJPQQMNwvLxgH2KcrKZklKLi/xXYIOaqQB57p/pDWEJNS83PVICYsn1Dg/9C26TiejNr422/ePaQ==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.4.tgz", + "integrity": "sha512-kRFftRoExRVXZlwUuay9iC824qmXPcQQVzAjbCCgjpXnkdMCJYBu2gTwAaFBzv8ewND6O8xFb3aELmEkh9zTzg==", "dev": true, "dependencies": { "colorette": "^1.2.1", @@ -3808,9 +3815,9 @@ "dev": true }, "node_modules/regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.6.tgz", + "integrity": "sha512-jjyuCp+IEMIm3N1H1LLTJW1EISEJV9+5oHdEyrt43Pg9cDSb6rrLZei2cVWpl0xTjmmlpec/lEQGYgM7xfpGCQ==", "dev": true, "dependencies": { "jsesc": "~0.5.0" @@ -3937,6 +3944,22 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true, + "peer": true + }, "node_modules/schema-utils": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", @@ -4226,17 +4249,17 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.0.3.tgz", - "integrity": "sha512-zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", + "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", "dev": true, "dependencies": { - "jest-worker": "^26.6.1", - "p-limit": "^3.0.2", + "jest-worker": "^26.6.2", + "p-limit": "^3.1.0", "schema-utils": "^3.0.0", "serialize-javascript": "^5.0.1", "source-map": "^0.6.1", - "terser": "^5.3.8" + "terser": "^5.5.1" }, "engines": { "node": ">= 10.13.0" @@ -4389,9 +4412,9 @@ "dev": true }, "node_modules/uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "dependencies": { "punycode": "^2.1.0" @@ -4492,17 +4515,16 @@ } }, "node_modules/webpack": { - "version": "5.11.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.11.1.tgz", - "integrity": "sha512-tNUIdAmYJv+nupRs/U/gqmADm6fgrf5xE+rSlSsf2PgsGO7j2WG7ccU6AWNlOJlHFl+HnmXlBmHIkiLf+XA9mQ==", + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.12.3.tgz", + "integrity": "sha512-7tiQmcTnKhZwbf7X7sEfXe0pgkGjUZjT6JfYkZHvvIb4/ZsXl1rJu5PxsJoN7W3v5sNSP/8TgBoiOdDqVdvK5w==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.0", "@types/estree": "^0.0.45", - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-module-context": "1.9.1", - "@webassemblyjs/wasm-edit": "1.9.1", - "@webassemblyjs/wasm-parser": "1.9.1", + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/wasm-edit": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", "acorn": "^8.0.4", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", @@ -4512,13 +4534,13 @@ "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.4", "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.1.0", + "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "pkg-dir": "^5.0.0", "schema-utils": "^3.0.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.0.3", + "terser-webpack-plugin": "^5.1.1", "watchpack": "^2.0.0", "webpack-sources": "^2.1.1" }, @@ -6006,177 +6028,148 @@ "dev": true }, "@webassemblyjs/ast": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.1.tgz", - "integrity": "sha512-uMu1nCWn2Wxyy126LlGqRVlhdTOsO/bsBRI4dNq3+6SiSuRKRQX6ejjKgh82LoGAPSq72lDUiQ4FWVaf0PecYw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", + "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.9.1", - "@webassemblyjs/helper-wasm-bytecode": "1.9.1", - "@webassemblyjs/wast-parser": "1.9.1" + "@webassemblyjs/helper-numbers": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.1.tgz", - "integrity": "sha512-5VEKu024RySmLKTTBl9q1eO/2K5jk9ZS+2HXDBLA9s9p5IjkaXxWiDb/+b7wSQp6FRdLaH1IVGIfOex58Na2pg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", + "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.1.tgz", - "integrity": "sha512-y1lGmfm38djrScwpeL37rRR9f1D6sM8RhMpvM7CYLzOlHVboouZokXK/G88BpzW0NQBSvCCOnW5BFhten4FPfA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", + "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.1.tgz", - "integrity": "sha512-uS6VSgieHbk/m4GSkMU5cqe/5TekdCzQso4revCIEQ3vpGZgqSSExi4jWpTWwDpAHOIAb1Jfrs0gUB9AA4n71w==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", + "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", "dev": true }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.1.tgz", - "integrity": "sha512-ZQ2ZT6Evk4DPIfD+92AraGYaFIqGm4U20e7FpXwl7WUo2Pn1mZ1v8VGH8i+Y++IQpxPbQo/UyG0Khs7eInskzA==", + "@webassemblyjs/helper-numbers": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", + "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.9.1" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.1.tgz", - "integrity": "sha512-J32HGpveEqqcKFS0YbgicB0zAlpfIxJa5MjxDxhu3i5ltPcVfY5EPvKQ1suRguFPehxiUs+/hfkwPEXom/l0lw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.1.tgz", - "integrity": "sha512-IEH2cMmEQKt7fqelLWB5e/cMdZXf2rST1JIrzWmf4XBt3QTxGdnnLvV4DYoN8pJjOx0VYXsWg+yF16MmJtolZg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.1" + "@webassemblyjs/floating-point-hex-parser": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.1.tgz", - "integrity": "sha512-i2rGTBqFUcSXxyjt2K4vm/3kkHwyzG6o427iCjcIKjOqpWH8SEem+xe82jUk1iydJO250/CvE5o7hzNAMZf0dQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", + "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.1.tgz", - "integrity": "sha512-FetqzjtXZr2d57IECK+aId3D0IcGweeM0CbAnJHkYJkcRTHP+YcMb7Wmc0j21h5UWBpwYGb9dSkK/93SRCTrGg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", + "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-buffer": "1.9.1", - "@webassemblyjs/helper-wasm-bytecode": "1.9.1", - "@webassemblyjs/wasm-gen": "1.9.1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0" } }, "@webassemblyjs/ieee754": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.1.tgz", - "integrity": "sha512-EvTG9M78zP1MmkBpUjGQHZc26DzPGZSLIPxYHCjQsBMo60Qy2W34qf8z0exRDtxBbRIoiKa5dFyWer/7r1aaSQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", + "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.1.tgz", - "integrity": "sha512-Oc04ub0vFfLnF+2/+ki3AE+anmW4sv9uNBqb+79fgTaPv6xJsOT0dhphNfL3FrME84CbX/D1T9XT8tjFo0IIiw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", + "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.1.tgz", - "integrity": "sha512-llkYtppagjCodFjo0alWOUhAkfOiQPQDIc5oA6C9sFAXz7vC9QhZf/f8ijQIX+A9ToM3c9Pq85X0EX7nx9gVhg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", + "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.1.tgz", - "integrity": "sha512-S2IaD6+x9B2Xi8BCT0eGsrXXd8UxAh2LVJpg1ZMtHXnrDcsTtIX2bDjHi40Hio6Lc62dWHmKdvksI+MClCYbbw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", + "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-buffer": "1.9.1", - "@webassemblyjs/helper-wasm-bytecode": "1.9.1", - "@webassemblyjs/helper-wasm-section": "1.9.1", - "@webassemblyjs/wasm-gen": "1.9.1", - "@webassemblyjs/wasm-opt": "1.9.1", - "@webassemblyjs/wasm-parser": "1.9.1", - "@webassemblyjs/wast-printer": "1.9.1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/helper-wasm-section": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-opt": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "@webassemblyjs/wast-printer": "1.11.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.1.tgz", - "integrity": "sha512-bqWI0S4lBQsEN5FTZ35vYzfKUJvtjNnBobB1agCALH30xNk1LToZ7Z8eiaR/Z5iVECTlBndoRQV3F6mbEqE/fg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", + "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-wasm-bytecode": "1.9.1", - "@webassemblyjs/ieee754": "1.9.1", - "@webassemblyjs/leb128": "1.9.1", - "@webassemblyjs/utf8": "1.9.1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.1.tgz", - "integrity": "sha512-gSf7I7YWVXZ5c6XqTEqkZjVs8K1kc1k57vsB6KBQscSagDNbAdxt6MwuJoMjsE1yWY1tsuL+pga268A6u+Fdkg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", + "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-buffer": "1.9.1", - "@webassemblyjs/wasm-gen": "1.9.1", - "@webassemblyjs/wasm-parser": "1.9.1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.1.tgz", - "integrity": "sha512-ImM4N2T1MEIond0MyE3rXvStVxEmivQrDKf/ggfh5pP6EHu3lL/YTAoSrR7shrbKNPpeKpGesW1LIK/L4kqduw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", + "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-api-error": "1.9.1", - "@webassemblyjs/helper-wasm-bytecode": "1.9.1", - "@webassemblyjs/ieee754": "1.9.1", - "@webassemblyjs/leb128": "1.9.1", - "@webassemblyjs/utf8": "1.9.1" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.1.tgz", - "integrity": "sha512-2xVxejXSvj3ls/o2TR/zI6p28qsGupjHhnHL6URULQRcXmryn3w7G83jQMcT7PHqUfyle65fZtWLukfdLdE7qw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/floating-point-hex-parser": "1.9.1", - "@webassemblyjs/helper-api-error": "1.9.1", - "@webassemblyjs/helper-code-frame": "1.9.1", - "@webassemblyjs/helper-fsm": "1.9.1", - "@xtuc/long": "4.2.2" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, "@webassemblyjs/wast-printer": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.1.tgz", - "integrity": "sha512-tDV8V15wm7mmbAH6XvQRU1X+oPGmeOzYsd6h7hlRLz6QpV4Ec/KKxM8OpLtFmQPLCreGxTp+HuxtH4pRIZyL9w==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", + "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/wast-parser": "1.9.1", + "@webassemblyjs/ast": "1.11.0", "@xtuc/long": "4.2.2" } }, @@ -6317,16 +6310,16 @@ } }, "browserslist": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.0.tgz", - "integrity": "sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.1.tgz", + "integrity": "sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001165", + "caniuse-lite": "^1.0.30001173", "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.621", + "electron-to-chromium": "^1.3.634", "escalade": "^3.1.1", - "node-releases": "^1.1.67" + "node-releases": "^1.1.69" } }, "buffer-from": { @@ -6336,13 +6329,13 @@ "dev": true }, "call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.1.tgz", + "integrity": "sha512-tvAvUwNcRikl3RVF20X9lsYmmepsovzTWeJiXjO0PkJp15uy/6xKFZOQtuiSULwYW+6ToZBprphCgWXC2dSgcQ==", "dev": true, "requires": { "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" + "get-intrinsic": "^1.0.2" } }, "camelcase": { @@ -6352,9 +6345,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001173", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001173.tgz", - "integrity": "sha512-R3aqmjrICdGCTAnSXtNyvWYMK3YtV5jwudbq0T7nN9k4kmE4CBuwPqyJ+KBzepSTh0huivV2gLbSMEzTTmfeYw==", + "version": "1.0.30001174", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001174.tgz", + "integrity": "sha512-tqClL/4ThQq6cfFXH3oJL4rifFBeM6gTkphjao5kgwMaW9yn0tKgQLAEfKzDwj6HQWCB/aWo8kTFlSvIN8geEA==", "dev": true }, "chalk": { @@ -6621,9 +6614,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.634", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.634.tgz", - "integrity": "sha512-QPrWNYeE/A0xRvl/QP3E0nkaEvYUvH3gM04ZWYtIa6QlSpEetRlRI1xvQ7hiMIySHHEV+mwDSX8Kj4YZY6ZQAw==", + "version": "1.3.635", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.635.tgz", + "integrity": "sha512-RRriZOLs9CpW6KTLmgBqyUdnY0QNqqWs0HOtuQGGEMizOTNNn1P7sGRBxARnUeLejOsgwjDyRqT3E/CSst02ZQ==", "dev": true }, "emoji-regex": { @@ -7007,6 +7000,17 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, "icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", @@ -7254,9 +7258,9 @@ "dev": true }, "less": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/less/-/less-4.0.0.tgz", - "integrity": "sha512-av1eEa2D0xZfF7fjLJS/Dld7zAYSLU7EOEJvuOELeaNI3i6L/81AdjbK5/pytaRkBwi7ZEa0433IDvMLskKCOw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.0.tgz", + "integrity": "sha512-w1Ag/f34g7LwtQ/sMVSGWIyZx+gG9ZOAEtyxeX1fG75is6BMyC2lD5kG+1RueX7PkAvlQBm2Lf2aN2j0JbVr2A==", "dev": true, "peer": true, "requires": { @@ -7266,7 +7270,7 @@ "image-size": "~0.5.0", "make-dir": "^2.1.0", "mime": "^1.4.1", - "native-request": "^1.0.5", + "needle": "^2.5.2", "parse-node-version": "^1.0.1", "source-map": "~0.6.0", "tslib": "^1.10.0" @@ -7338,9 +7342,9 @@ } }, "loader-runner": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.1.0.tgz", - "integrity": "sha512-oR4lB4WvwFoC70ocraKhn5nkKSs23t57h9udUgw8o0iH8hMXeEoRuUgfcvgUwAJ1ZpRqBvcou4N2SMvM1DwMrA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", "dev": true }, "loader-utils": { @@ -7527,13 +7531,31 @@ "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", "dev": true }, - "native-request": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.0.8.tgz", - "integrity": "sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag==", + "needle": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", + "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", "dev": true, "optional": true, - "peer": true + "peer": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "ms": "^2.1.1" + } + } + } }, "neo-async": { "version": "2.6.2", @@ -7713,9 +7735,9 @@ } }, "postcss": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.2.tgz", - "integrity": "sha512-HM1NDNWLgglJPQQMNwvLxgH2KcrKZklKLi/xXYIOaqQB57p/pDWEJNS83PVICYsn1Dg/9C26TiejNr422/ePaQ==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.4.tgz", + "integrity": "sha512-kRFftRoExRVXZlwUuay9iC824qmXPcQQVzAjbCCgjpXnkdMCJYBu2gTwAaFBzv8ewND6O8xFb3aELmEkh9zTzg==", "dev": true, "requires": { "colorette": "^1.2.1", @@ -7888,9 +7910,9 @@ "dev": true }, "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.6.tgz", + "integrity": "sha512-jjyuCp+IEMIm3N1H1LLTJW1EISEJV9+5oHdEyrt43Pg9cDSb6rrLZei2cVWpl0xTjmmlpec/lEQGYgM7xfpGCQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -7977,6 +7999,22 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true, + "peer": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true, + "peer": true + }, "schema-utils": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", @@ -8209,17 +8247,17 @@ } }, "terser-webpack-plugin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.0.3.tgz", - "integrity": "sha512-zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", + "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", "dev": true, "requires": { - "jest-worker": "^26.6.1", - "p-limit": "^3.0.2", + "jest-worker": "^26.6.2", + "p-limit": "^3.1.0", "schema-utils": "^3.0.0", "serialize-javascript": "^5.0.1", "source-map": "^0.6.1", - "terser": "^5.3.8" + "terser": "^5.5.1" }, "dependencies": { "p-limit": { @@ -8318,9 +8356,9 @@ "dev": true }, "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" @@ -8394,17 +8432,16 @@ } }, "webpack": { - "version": "5.11.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.11.1.tgz", - "integrity": "sha512-tNUIdAmYJv+nupRs/U/gqmADm6fgrf5xE+rSlSsf2PgsGO7j2WG7ccU6AWNlOJlHFl+HnmXlBmHIkiLf+XA9mQ==", + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.12.3.tgz", + "integrity": "sha512-7tiQmcTnKhZwbf7X7sEfXe0pgkGjUZjT6JfYkZHvvIb4/ZsXl1rJu5PxsJoN7W3v5sNSP/8TgBoiOdDqVdvK5w==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", "@types/estree": "^0.0.45", - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-module-context": "1.9.1", - "@webassemblyjs/wasm-edit": "1.9.1", - "@webassemblyjs/wasm-parser": "1.9.1", + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/wasm-edit": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", "acorn": "^8.0.4", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", @@ -8414,13 +8451,13 @@ "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.4", "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.1.0", + "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "pkg-dir": "^5.0.0", "schema-utils": "^3.0.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.0.3", + "terser-webpack-plugin": "^5.1.1", "watchpack": "^2.0.0", "webpack-sources": "^2.1.1" }, diff --git a/src/js/controls/BasemapControl.css b/src/js/controls/BasemapControl.css new file mode 100644 index 0000000..52962d7 --- /dev/null +++ b/src/js/controls/BasemapControl.css @@ -0,0 +1,24 @@ +.gba_basemap_img { + width: 80px; + height: 80px; + -moz-border-radius: 1px; + -webkit-border-radius: 1px; + border-radius: 1px; + -webkit-box-shadow: 0 0 0 6px white, 0 0 0 7px black; + -moz-box-shadow: 0 0 0 6px white, 0 0 0 7px black; + box-shadow: 0 0 0 6px white, 0 0 0 7px black; +} + +.gba_basemap_option { + color: black; + text-decoration: none; + font-size: .8em; + text-align: center; + display: inline-block; + margin: 10px 15px 10px 15px; +} + +.gba_basemap_option label { + display: block; + margin-top: 5px; +} \ No newline at end of file diff --git a/src/js/controls/BasemapControl.js b/src/js/controls/BasemapControl.js new file mode 100644 index 0000000..58d8c59 --- /dev/null +++ b/src/js/controls/BasemapControl.js @@ -0,0 +1,112 @@ +import { Control } from "./Control"; +import { MobileDialog } from "./MobileDialog"; +import * as dom from '../core/domUtil'; +import * as util from '../core/utilities'; +import * as domEvent from '../core/domEvent'; + +import './BasemapControl.css'; + +export class BasemapControl extends MobileDialog { + + defaultTitle = '3DViewer'; + + constructor(title, options) { + super(title, options); + + util.setOptions(this, options); + + // for (var i in baseLayers) { + // this._addLayer(baseLayers[i], i); + // } + + + + } + + onAdd(map) { + super.onAdd(map); + let basemaps = this.basemaps = map.basemaps; + + this._initBasemapHtml(basemaps.services); + } + + // onAdd(map) { + // this._mainMap = map; + // let basemaps = this.basemaps = map.basemaps; + + + + // let className = "gba-basemap-control"; + // let container; + // let toggleable = false; + + // if (this.options.parentDiv) { + // container = this._container = document.getElementById(this.options.parentDiv); + // dom.addClass(container, className); + // toggleable = false; + // } else { + // container = this._container = dom.createDom("div", { "class": className }); + // toggleable = true; + // } + // domEvent.on(container, 'click', domEvent.stopPropagation); + + // this._initBasemapHtml(basemaps.services); + + // if (!this.options.parentDiv) { + // return container; + // } + // } + + _initBasemapHtml(basemapServices) { + + for (let i = 0; i < basemapServices.length; i++) { + let basemap = basemapServices[i]; + if (basemap.type === 'MapServer') { + //code += "" + // + "" + // + ""; + //+ ""; + var btnLink = dom.createDom('a', { + 'class': 'gba_basemap_option' + }, this.popupcontent); + btnLink.dataset.name = basemap.name; + + let image = dom.createDom('img', { + 'class': 'gba_basemap_img', + }, btnLink); + //image.setAttribute('src', "images/basemap/" + basemap.image); + let imagePath = "images/"; + image.setAttribute('src', imagePath + "basemap/" + basemap.image); + + dom.createDom('label', { innerHTML: basemap.title }, btnLink); + + domEvent.on(btnLink, 'click', function (e) { + e.preventDefault(); + let name = e.currentTarget.getAttribute('data-name'); + this.setBasemap(name); + // this.hide(); + return false; + }, this); + } + } + + } + + setBasemap(name) { + for (let i = 0; i < this.basemaps.services.length; i++) { + if (this.basemaps.services[i].name === name) { + let basemap = this.basemaps.services[i]; + if (this._map.currentBasemap) { + //this.map.removeLayer(this.map.currentBasemap); + this._map.currentBasemap.changeImage(i); + } + //var curentBaseMap = this.map.currentBasemap = new esri.layers.ArcGISTiledMapServiceLayer(getBasemapUrl(basemaps.services[i]), { + // id: 'basemap' + //}); + //this.map.addLayer(currentBasemap); + return true; + } + } + } + +} \ No newline at end of file diff --git a/src/js/controls/Coordinates.js b/src/js/controls/Coordinates.js index 8a67984..e5a08b5 100644 --- a/src/js/controls/Coordinates.js +++ b/src/js/controls/Coordinates.js @@ -63,7 +63,7 @@ export class Coordinates extends Control { let x = (xClickedOnCanvas / width) * 2 - 1; let y = -(yClickedonCanvas / height) * 2 + 1; - let mouse = new Vector3(x, y); + let mouse = new Vector3(x, y, 1); mouse.unproject(this.options.camera); // vector.sub(this.options.camera.position); // vector.normalize(); @@ -75,6 +75,7 @@ export class Coordinates extends Control { let koordx = this._dec2sex(point84.x, 'X'); let koordy = this._dec2sex(point84.y, 'y'); this._container.innerHTML = "LON: " + koordx + ", " + "LAT: " + koordy; + // this._container.innerHTML = "x: " + mouse.x + ", " + "y: " + mouse.y; } _getOffset(element) { diff --git a/src/js/controls/MobileDialog.css b/src/js/controls/MobileDialog.css new file mode 100644 index 0000000..be7d437 --- /dev/null +++ b/src/js/controls/MobileDialog.css @@ -0,0 +1,155 @@ + .popup_close { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH3AgBFSI5w7714wAAAYlJREFUSMfd1c9KFWEYBvCfJz15NI8RoRnpLohuILyMll1CG0taibhqERkJQWFBixbZpkSwlRs3kdfhBYgaBHU4h8bNGwzTfDNzIgh8YWBmeL7n/TPP8w7/MUb+BbaVeD+NO+g0IG9hEVeaVtPFGjK8wIUa/KPAvsVsHfk0VuNAhh420E7gl/Eth39TlWQsV02GX7kkzzBeGMtDnOawv/GbqdF28A79kkM/8CSSjGAJxyW4DPsxidJoR5uDksM/8TgqP0qQf8bluu/QwetEJ4PcfZF8B1ebKmkSLxNJyp4/YWZYo3VDpt9zRMWrjw+Y+1s3X8dBRYJD3K5zYSpGcRfzNV3ew8SwlbfwoEKKRXU9LfikNpZwkiAvS9LDenRdG8sV5Fsh4V6ik+dVY29jJbdbiuQfcQ1TIeFBopNXIfM/4mLIsox8uyDFbhCV+WQPl1JdLOB9YdY7CRNNxmLr57BfQraVP6sbMesMuzX2H4/dleErbjVV0QLuN3ToREj65rBeGB0CO+bcxhlxQrBXIUNRlQAAAABJRU5ErkJggg==')/*icons/close.png*/ + no-repeat; + } + + /* anything but phone */ + + @media all and (min-width: 768px) { + .touch .popup_close { + width: 20px; + height: 20px; + /*margin: 5px;*/ + background-size: 20px 20px; + float: right; + cursor: pointer; + z-index: 800; + } + .touch .fm_overlay { + top: 10em; + left: 30%; + max-width: 480px; + min-width: 300px; + /*max-height: 90%;*/ + max-height: 500px; + overflow: auto; + } + .touch .popupcontent { + width: 100%; + } + } + + /* only phone - bigger buttons */ + + @media all and (max-width: 767px) { + .touch .popup_close { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH3AcXFyot5RvgagAAAbdJREFUaN7t2DFOAkEUxvE/6AFMUBMoIDExHsMDqJVgZ+KJKIyFBSjGxCN4DbUSC6XRys5GZDXYMAkh7rLz5s0smPmSLXnDj2Hhm4WYmJiYlFSAG2DTw+wS0AZ2fSOqQB8YA09ATXF2GbiczB4CeyEQY2VMGbiYmT0E9kMgtDB/IbxgahkIV0wWQhWTByHF5EGY68sFY4OwxdggpjEHEsit5ULmegDW5/zEnglnfwAbtpA68CxcsJ+yM2WgK5w5Ag6lXy9NjCui6XrD14EXB0x1ERAm28Cr8I3cA+fC134Dx9p/ii47I7kSzZ0oCuMVEQoTBGHS8IQJivCFKQShjUmAVtEnxgYwWHaE6U7XDpCBpD9pR9JibbpZMERX8WYvBKONKATjCzFbNJcaEQQTCuEVUwJOHar4u8MRoLIIO2Fqh8bhzBnRUepOhWE0ERqYRymmLVzwBzjJmLsDvAln3wFrtpDW5JP1UQClrfkKWJHsig3GtsXaYnpShEkzB0ZaxfMeAXqTe9Y5WZgEOPJ4nlFDZGFcEfMw6ohpzEgZkYbxhpjGfCojZjHeESZbnp8BrBITExPzr/MLneElMzKD908AAAAASUVORK5CYII=')/*mobile_icons/close.png*/ + no-repeat; + width: 25px; + height: 25px; + background-size: 25px 25px; + float: right; + cursor: pointer; + z-index: 800; + } + .touch .fm_overlay { + bottom: 4em; + left: 20px; + right: 20px; + max-height: 70%; + overflow-y: auto; + } + /*.touch .fm_basemap_list{ max-height: 80%; overflow-y: auto;}*/ + } + + .popup .fm_overlay { + position: fixed; + width: 300px; + left: 50%; + margin-left: -150px; + top: 50%; + margin-top: -150px; + /* display: none; */ + z-index: 9999; + padding: 10px; + background-color: #ffffff; + border: solid gray; + border-width: 1px 2px 2px; + border-radius: 3px; + } + + .touch .popup .fm_overlay { + /* display: none; */ + position: absolute; + background-color: white; + z-index: 9999; + padding: 10px; + border-radius: 1px; + box-shadow: 0 0 0 10px rgba(34, 34, 34, .6); + } + + .popup .fm_overlay.show { + opacity: 1; + transition: opacity 1000ms; + } + + .popup .fm_overlay.hide { + opacity: 0; + transition: opacity 1000ms; + } + + .popupbar { + background: dimgray; + color: white; + padding-left: 4px; + height: 20px; + } + + .touch .popupbar { + background: dimgray; + color: white; + padding-left: 4px; + height: 25px; + } + + .touch .popup_close { + float: right; + cursor: pointer; + z-index: 800; + } + + .popup_close { + color: rgb(220, 220, 220); + border: 1px solid darkgray; + border-radius: 4px; + font-size: 16px; + font-weight: bold; + width: 16px; + height: 16px; + text-align: center; + float: right; + cursor: pointer; + background-size: 16px 16px; + } + + .fm_overlay { + background-color: white; + padding: 2px 5px 2px; + max-height: 500px; + overflow: auto; + font-size: 14px; + } + + .pageinfo { + font-size: small; + } + + .pageinfo h1 { + background-color: gray; + color: white; + font-size: small; + font-weight: normal; + margin-top: 5px; + margin-bottom: 3px; + padding: 1px; + padding-left: 6px; + } + + .license { + font-size: xx-small; + } + + .star { + padding: 5px; + text-align: left; + } \ No newline at end of file diff --git a/src/js/controls/MobileDialog.js b/src/js/controls/MobileDialog.js new file mode 100644 index 0000000..1deee00 --- /dev/null +++ b/src/js/controls/MobileDialog.js @@ -0,0 +1,118 @@ +import { Control } from "./Control"; +import * as dom from '../core/domUtil'; +import * as domEvent from '../core/domEvent'; + +import './MobileDialog.css'; + +export class MobileDialog extends Control { + + defaultTitle = '3DViewer'; + declaredClass = "MobileDialog"; + defaultOptions = {}; + + constructor(title, options) { + super(options); + + this.title = title ? title : this.defaultTitle; + this.options = options || this.defaultOptions; + } + + onAdd(map) { + this.map = map; + + let className = "gba-basemap-control"; + let container; + let toggleable = false; + + if (this.options.position) { + container = this._container = dom.createDom("div", { "class": className }); + toggleable = true; + + } else { + container = this._container = this.map.container + dom.addClass(container, className); + toggleable = false; + + } + + this.domNode = dom.createDom("div", { class: "popup" }, container); + this.dialogDiv = dom.createDom("div", { + //class: "fm_basemap_list fm_overlay", + //class: "fm_about fm_overlay", + class: this.options.klass + " fm_overlay hide" + }, this.domNode); + + + + //popupbar + this.popupbar = dom.createDom("div", { 'class': "popupbar" }, this.dialogDiv); + this.popuptitle = dom.createDom("b", { 'class': "popuptitle" }, this.popupbar); + let popup_close = dom.createDom("div", { 'class': "popup_close" }, this.popupbar); + this.popuptitle.innerHTML = this.title; + + //popupcontent + this.popupcontent = dom.createDom("div", { 'class': "fm_handle" }, this.dialogDiv); + + //additional info div + this.pageinfo = dom.createDom("div", { + 'class': "pageinfo" + }, this.dialogDiv); + + domEvent.on(popup_close, 'click', domEvent.preventDefault); + domEvent.on(popup_close, 'click', domEvent.stopPropagation); + domEvent.on(popup_close, 'click', this.hide, this); + + if (this.options.position) { + return container; + } + } + + hide(e) { + this.dialogDiv.classList.add('hide'); + this.dialogDiv.classList.remove('show'); + } + + show() { + // let isHelp = html === undefined ? true : false; + + // if (html === undefined) { + // html = this._help(); + // } + + // if (html instanceof HTMLElement) { + // this.popupcontent.innerHTML = ""; + // this.popupcontent.appendChild(html); + // } + // else { + // this.popupcontent.innerHTML = html; + // } + + // this.domNode.getElementsByClassName("popuptitle")[0].innerHTML = title || this.title; + + // if (!isHelp) { + // //document.getElementById("pageinfo").style.display = "none"; + // this.pageinfo.style.display = "none"; + // } + // else { + // //document.getElementById("pageinfo").style.display = "block"; + // this.pageinfo.style.display = "block"; + // } + + this.dialogDiv.classList.add('show'); + this.dialogDiv.classList.remove('hide'); + } + + _help() { + let html = ""; + //var imagePath = $UrlHelper.resolve('~') + "content/img/"; + let imagePath = "content/img/"; + let list = '
  • Rotate 3D Model
  • ' + + '
  • Zoom 3D Model
  • ' + + '
  • Pan 3D Model
'; + html += list; + return html; + } + + +} + diff --git a/src/js/core/Map.js b/src/js/core/Map.js index 247afce..095bd06 100644 --- a/src/js/core/Map.js +++ b/src/js/core/Map.js @@ -25,6 +25,14 @@ class Map extends OrbitControls { } this._layers = {}; this.initControls(); + + this.basemaps = { + "currentVersion": 10.01, + "services": [ + { "name": "esri:topograhy", "type": "MapServer", 'image': 'background_esri_world_topography.png', 'title': 'ESRI Topograhy' }, + { "name": "esri:imagery", "type": "MapServer", 'image': 'background_esri_world_imagery.png', 'title': 'ESRI Imagery' }, + ] + }; } get layers() { @@ -82,7 +90,7 @@ class Map extends OrbitControls { return this; } - hasLayer (layer) { + hasLayer(layer) { return !!layer && (util.stamp(layer) in this._layers); } diff --git a/src/js/core/browser.js b/src/js/core/browser.js index 8ac6886..3ee8b2a 100644 --- a/src/js/core/browser.js +++ b/src/js/core/browser.js @@ -14,4 +14,7 @@ export var mobile = typeof orientation !== 'undefined' || userAgentContains('mob function userAgentContains(str) { return navigator.userAgent.toLowerCase().indexOf(str) >= 0; -} \ No newline at end of file +} + +// @property ie: Boolean; `true` for all Internet Explorer versions (not Edge). +export var ie = 'ActiveXObject' in window; \ No newline at end of file diff --git a/src/js/layer/BoxLayer.js b/src/js/layer/BoxLayer.js index f190aef..6c08068 100644 --- a/src/js/layer/BoxLayer.js +++ b/src/js/layer/BoxLayer.js @@ -5,15 +5,28 @@ import { Layer } from './Layer' class BoxLayer extends Layer { - constructor(size) { + constructor(params) { super(); - this.geometry = new BoxGeometry(size.width, size.height, size.depth); + this.visible = true; + this.name = params.name; + this.color = params.color; + this.geometry = new BoxGeometry(params.width, params.height, params.depth); this.material = new MeshBasicMaterial({ - color: 800080 + color: this.color }); - + this.materials = []; + this.materials.push(this.material); this.mesh = new Mesh(this.geometry, this.material); + this.mesh.position.x = 4282010; + this.mesh.position.y = 2302070; + this.mesh.position.z = -13616.3; + } + + setVisible(visible) { + this.visible = visible; + this.mesh.visible = visible; + this.emit('visibility-change'); } onAdd(map) { @@ -30,6 +43,19 @@ class BoxLayer extends Layer { getMesh() { return this.mesh; } + + scaleZ(z) { + this.mesh.scale.z = z; + //this.objectGroup.scale.z = z; + } + + setWireframeMode(wireframe) { + this.materials.forEach(function (mat) { + //if (m.w) return; + //m.mat.wireframe = wireframe; + mat.wireframe = wireframe; + }); + } } export { BoxLayer }; \ No newline at end of file diff --git a/src/js/layer/DemBlock.js b/src/js/layer/DemBlock.js new file mode 100644 index 0000000..23568c2 --- /dev/null +++ b/src/js/layer/DemBlock.js @@ -0,0 +1,208 @@ +import { BufferGeometry } from 'three/src/core/BufferGeometry'; +import { BufferAttribute, Float32BufferAttribute, Uint16BufferAttribute } from 'three/src/core/BufferAttribute'; +import { Mesh } from 'three/src/objects/Mesh'; +// import { PlaneBufferGeometry } from 'three/src/geometries/PlaneBufferGeometry'; + +export class DemBlock { + + constructor(params) { + //properties + for (var k in params) { + this[k] = params[k]; + } + this.aObjs = []; + //eventuell wieder löschen: + this.mIndex = 0; + this.materialsArray = []; + } + + build(layer) { + let xPixel = this.width; + let widthSegments = xPixel - 1; //this.width = xPixel + let yPixel = this.height; + let heightSegments = yPixel - 1; + + //appSettings.Options.exportMode = true; + // let PlaneGeometry = (appSettings.Options.exportMode) ? THREE.PlaneGeometry : THREE.PlaneBufferGeometry; + //var geom = layer.mainGeometry = new PlaneGeometry(this.plane.width, this.plane.height, widthSegments, heightSegments); + let geom = layer.mainGeometry = this.buildPlaneBufferGeometry(this.plane.width, this.plane.height, widthSegments, heightSegments);// new THREE.PlaneBufferGeometry(this.plane.width, this.plane.height, 11, 7); + + // let geom = layer.mainGeometry = new PlaneBufferGeometry( 10, 5, 20, 20 ); + + //let geom = layer.mainGeometry = planeGeometry.toNonIndexed(); + this.layer.features = geom.attributes.position.array; + this.layer.idx = geom.getIndex() !== null ? geom.getIndex().array : null; + var dem_data = this.dem_values; + + + ////// Filling of the DEM plane + //var vertices = geom.attributes.position.array; + //for (var i = 0, j = 0, l = vertices.length; i < l; i++, j += 3) { + // // x + // //vertices[i] = defaultVertices[i] + (rand(-opts.variance.x, opts.variance.x)); + // // y + // //vertices[i + 1] = + + // //z + // vertices[j + 2] = dem_data[i]; + //} + let i, j, l; + let exportMode = false; + if (exportMode == true) { //PlaneGeometry + if (dem_data.length > 0) { + for (i = 0, l = geom.vertices.length; i < l; i++) { + geom.vertices[i].z = dem_data[i]; + } + } + else { + for (i = 0, l = geom.vertices.length; i < l; i++) { + geom.vertices[i].z = layer.materialParameter[0].bottomZ; + } + } + } else { //Plane PlaneBufferGeometry + var vertices = geom.attributes.position.array; + if (dem_data.length > 0) { + for (i = 0, j = 0, l = vertices.length; i < l; i++, j += 3) { + //z + var hoehenwert = !isNaN(dem_data[i]) ? dem_data[i] : 5; + vertices[j + 2] = hoehenwert;//dem_data[i]; + } + } + else { + for (i = 0, j = 0, l = vertices.length; i < l; i++, j += 3) { + //z + vertices[j + 2] = layer.materialParameter[0].bottomZ; //Math.random() * 0.1;//layer.materialParameter[0].bottomZ; + } + } + // var bufferAttribute = layer.mainGeometry.getAttribute('position'); + // bufferAttribute.setDynamic(true); + // layer.positions = bufferAttribute.clone().array; + // //defaultVertices = planeGeometry.attributes.position.clone().array; + } + + + // Calculate normals + //if (layer.shading) { + // //geom.computeFaceNormals();obsolete + // geom.computeVertexNormals(); + //} + geom.computeBoundingBox();//for building border geometry + + //var material = new THREE.MeshPhongMaterial({ color: 0x223322, wireframe: true }); + //var mesh = new THREE.Mesh(geom, material); + + //var wireframe_material = new THREE.MeshBasicMaterial({ color: 0x000000, wireframe: true, wireframe_linewidth: 10 }); + //var materials = [layer.materials[this.mIndex].mat, wireframe_material]; + //var mesh = THREE.SceneUtils.createMultiMaterialObject(geom, materials); + + + var mesh = layer.mainMesh = new Mesh(geom, layer.material); //layer.materials[this.mIndex].mat); + //mesh.name = "Oberkante"; + + //mesh.matrixAutoUpdate = true; + + //var egh = new THREE.EdgesHelper(mesh, 0x00ffff); + //egh.material.linewidth = 2; + //layer.addObject(egh); + + if (this.plane.offsetX != 0) mesh.position.x = this.plane.offsetX; + if (this.plane.offsetY != 0) mesh.position.y = this.plane.offsetY; + // mesh.position.z = -13616.3; + mesh.userData.layerId = layer.index; + this.obj = mesh; + layer.addObject(mesh); + //layer.mainMesh = mesh; + } + + buildPlaneBufferGeometry(width, height, widthSegments, heightSegments) { + let geometry = new BufferGeometry(); + //geometry.dynamic = true; + + let width_half = width / 2; + let height_half = height / 2; + + let gridX = widthSegments || 1; + var gridY = heightSegments || 1; + + let gridX1 = gridX + 1; + let gridY1 = gridY + 1; + + let segment_width = width / gridX; + let segment_height = height / gridY; + + //var vertices = this.layer.positions = new Float32Array(gridX1 * gridY1 * 3); + let vertices = new Float32Array(gridX1 * gridY1 * 3); + let normals = new Float32Array(gridX1 * gridY1 * 3); + let uvs = new Float32Array(gridX1 * gridY1 * 2); + + let offset = 0; + let offset2 = 0; + + for (let iy = 0; iy < gridY1; iy++) { + + let y = iy * segment_height - height_half; + + for (let ix = 0; ix < gridX1; ix++) { + + let x = ix * segment_width - width_half; + + vertices[offset] = x; + vertices[offset + 1] = -y; + vertices[offset + 2] = 0; //this.layer.materialParameter[0].bottomZ; + + normals[offset + 2] = 1; + + uvs[offset2] = ix / gridX; + uvs[offset2 + 1] = 1 - (iy / gridY); + + offset += 3; + offset2 += 2; + + } + + } + let position = new Float32BufferAttribute(vertices, 3);//.setDynamic(true); + position.needsUpdate = true; + geometry.setAttribute('position', position); + + offset = 0; + //var indices = this.layer.indices = new Uint16Array(gridX * gridY * 6); + let indices = new Uint16Array(gridX * gridY * 6); + + for (let iy = 0; iy < gridY; iy++) { + + for (let ix = 0; ix < gridX; ix++) { + + let a = ix + gridX1 * iy; + let b = ix + gridX1 * (iy + 1); + let c = (ix + 1) + gridX1 * (iy + 1); + let d = (ix + 1) + gridX1 * iy; + + indices[offset] = a; + indices[offset + 1] = b; + indices[offset + 2] = d; + + indices[offset + 3] = b; + indices[offset + 4] = c; + indices[offset + 5] = d; + + offset += 6; + + } + + } + //geometry.attributes['index'] = { array: indices, itemSize: 1 }; + //geometry.setIndex(new THREE.BufferAttribute(indices, 1).setDynamic(true)); + //geometry.addAttribute('index', new THREE.BufferAttribute(indices, 1)); + let index = new BufferAttribute(indices, 1);//setDynamic(true); + geometry.setIndex(index); + + geometry.setAttribute('normal', new BufferAttribute(normals, 3)); + geometry.setAttribute('uv', new BufferAttribute(uvs, 2)); + //geometry.attributes['normal'] = { array: normals, itemSize: 3 }; + //geometry.attributes['uv'] = { array: uvs, itemSize: 2 }; + + return geometry; + } + +} \ No newline at end of file diff --git a/src/js/layer/DemLayer.js b/src/js/layer/DemLayer.js new file mode 100644 index 0000000..0dc5f7c --- /dev/null +++ b/src/js/layer/DemLayer.js @@ -0,0 +1,336 @@ +import { Group } from 'three/src/objects/Group'; +// import { BufferGeometry } from 'three/src/core/BufferGeometry'; +// import { Float32BufferAttribute, Uint16BufferAttribute } from 'three/src/core/BufferAttribute'; +// import { MeshStandardMaterial } from 'three/src/materials/MeshStandardMaterial'; +// import { Mesh } from 'three/src/objects/Mesh'; +import { Layer } from './Layer'; +import { DemBlock } from './DemBlock'; +import { MeshStandardMaterial } from 'three/src/materials/MeshStandardMaterial'; +import { MeshLambertMaterial } from 'three/src/materials/MeshLambertMaterial'; +import { DoubleSide, FlatShading, LinearFilter } from 'three/src/constants'; +import * as browser from '../core/browser'; +import { Texture } from 'three/src/textures/Texture'; +import { TextureLoader } from 'three/src/loaders/TextureLoader'; + +export class DemLayer extends Layer { + + images = [{ + "width": 1154, + "url": "https://services.arcgisonline.com/arcgis/rest/services/World_Topo_Map/MapServer/export", + "height": 907, + "bboxSR": 3034 + }, { + "width": 1154, + "url": "https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/export", + "height": 907, + "bboxSR": 3034 + } + ]; + + constructor(params) { + super(); + + //this.features = []; + this.visible = true; + this.opacity = 1; + this.material; + this.materialParameter = []; + this.materials = []; + for (var k in params) { + this[k] = params[k]; + } + + this.objectGroup = new Group(); + this.queryableObjects = []; + this.borderVisible = false; + this.blocks = []; + + + // this.material = new MeshStandardMaterial({ + // color: 16382457, + // metalness: 0.1, + // roughness: 0.75, + // flatShading: true, + // side: DoubleSide + // }); + // this.materialsArray.push(this.material); + // this.initMaterials(); + } + + async initMaterials() { + if (this.materialParameter.length === 0) return; + // this.xLocalPlane = new THREE.Plane(new THREE.Vector3(-1, 0, 0), 50); + // //this.addObject(this.xLocalPlane, false); + // this.yLocalPlane = new THREE.Plane(new THREE.Vector3(0, 1, 0), 39); + + let sum_opacity = 0; + this.material; + for (let i = 0, l = this.materialParameter.length; i < l; i++) { + let m = this.materialParameter[i]; + + let opt = {}; + //if (m.ds && !Gba3D.isIE) opt.side = THREE.DoubleSide; + if (m.ds && !browser.ie) opt.side = DoubleSide; + if (m.flat) opt.shading = FlatShading; + //m.i = 1; + if (m.i !== undefined) { + let image = this.images[m.i]; + if (image.texture === undefined) { + if (image.src !== undefined) { + image.texture = THREE.ImageUtils._loadTexture(image.src); + } + else { + // image.texture = this._loadTextureData(image.data); + let data = await this.requestImage(image.url, image); + // image.texture = await new TextureLoader().load(data.href); + image.texture = await this.loadTexture(data.href); + } + } + opt.map = image.texture; + } + if (m.o !== undefined && m.o < 1) { + opt.opacity = m.o; + opt.transparent = true; + } + if (m.t) opt.transparent = true; + if (m.w) opt.wireframe = true; + //opt.wireframe = true; + + // // Clipping setup: + // opt.clippingPlanes = [this.xLocalPlane, this.yLocalPlane]; + // opt.clipIntersection = false; + // opt.clipShadows = true; + + let MaterialType = { MeshLambert: 0, MeshPhong: 1, LineBasic: 2, Sprite: 3, Unknown: -1 }; + + if (m.materialtypee === MaterialType.MeshLambert) { + //if (m.color !== undefined) opt.color = opt.ambient = m.color; + if (m.color !== undefined) opt.color = m.color; + //opt.skinning = true; + this.material = new MeshLambertMaterial(opt); + } + // else if (m.materialtype === MaterialType.MeshPhong) { + // if (m.color !== undefined) opt.color = opt.ambient = m.color; + // mat = new THREE.MeshPhongMaterial(opt); + // } + // else if (m.materialtype === MaterialType.LineBasic) { + // opt.color = m.color; + // mat = new THREE.LineBasicMaterial(opt); + // } + else { + if (m.color !== undefined) opt.color = m.color; + this.material = new MeshStandardMaterial(opt); + } + + m.mat = this.material; + //if (m.side !== undefined) { + // m. + //} + this.materials.push(this.material); + sum_opacity += this.material.opacity; + } + + // layer opacity is the average opacity of materials + this.opacity = sum_opacity / this.materials.length; + } + + scaleZ(z) { + // this.mainMesh.scale.z = z; + this.objectGroup.scale.z = z; + } + + setVisible(visible) { + this.visible = visible; + this.objectGroup.visible = visible; + // this.mainMesh.visible = visible; + //Q3D.application.queryObjNeedsUpdate = true; + this.emit('visibility-change'); + } + + addBlock(params, clipped = false) { + let BlockClass = clipped ? ClippedDEMBlock : DemBlock; + var block = new BlockClass(params); + block.layer = this; + this.blocks.push(block); + return block; + } + + setWireframeMode(wireframe) { + this.materials.forEach(function (mat) { + //if (m.w) return; + //m.mat.wireframe = wireframe; + mat.wireframe = wireframe; + }); + } + + async changeImage(i) { + //this.mainMesh.material.map = THREE.ImageUtils.loadTexture(src); + let image = this.images[i]; + if (image.texture === undefined) { + // image.texture = this._loadTextureData(image.data); + + //image.texture = await this.loadTextureData(image.data); + let data = await this.requestImage(image.url, image); + // image.texture = new TextureLoader().load(data.href); + image.texture = await this.loadTexture(data.href); + } + //configure the material now that we have all of the data + this.mainMesh.material.map = image.texture; + this.mainMesh.material.needsUpdate = true; + if (this.visible === false) { + this.setVisible(true); + } + this._map.update(); + } + + //helper function to load in the texture + async loadTexture(texturePath) { + const textureLoader = new TextureLoader(); + return new Promise((resolve, reject) => { + textureLoader.load( + texturePath, + (texture) => resolve(texture), + undefined, + err => reject(err) + ); + }); + } + + + async onAdd(map) { + //this._zoomAnimated = this._zoomAnimated && map.options.markerZoomAnimation; + + await this.initMaterials(); + this.build(this.getScene()); + map.update(); + this.emit('add'); + } + + build(app_scene) { + //var opt = Gba3D.Options; + this.blocks.forEach(function (block) { + block.build(this); + + //// build sides, bottom and frame + ////if (block.sides) { + + //// material + //var opacity = this.materials[block.mIndex].o; + //if (opacity === undefined) { + // opacity = 1; + //} + //var sidecolor = this.materials[block.mIndex].side.color; + + //var mat = new THREE.MeshLambertMaterial({ + // color: sidecolor, //opt.side.color, + // ambient: sidecolor,//opt.side.color, + // opacity: opacity, + // transparent: (opacity < 1), + // side: THREE.DoubleSide //neu dazu + //}); + //this.materials.push({ type: Gba3D.MaterialType.MeshLambert, m: mat }); + + //if (block.bottomData) { + // //block.extrudePlane(this, mat, opt.side.bottomZ); + // block.extrudePlane(this, mat, opt.side.bottomZ); + //} + //else { + // //var sidecolor = this.materials[block.mIndex].side.color; + // var bottomZ = this.materials[block.mIndex].side.bottomZ; + // block.extrudeBottomPlane(this, mat, bottomZ); + //} + //this.sideVisible = true; + ////} + + }, this); + + if (app_scene) { + app_scene.add(this.objectGroup); + } + } + + addObject(object, queryable) { + if (queryable === undefined) { + queryable = this.q; + } + + this.objectGroup.add(object); + if (queryable) { + this._addQueryableObject(object); + } + } + + _addQueryableObject(object) { + this.queryableObjects.push(object); + //for (var i = 0, l = object.children.length; i < l; i++) { + // this._addQueryableObject(object.children[i]); + //} + } + + removeObject(object, queryable) { + if (queryable === undefined) { + queryable = this.q; + } + + this.objectGroup.remove(object); + if (queryable) { + + var index = this.queryableObjects.indexOf(object); + index !== -1 && this.queryableObjects.splice(index, 1); + } + } + + async requestImage(url, imageParameter) { + let params = { + "width": imageParameter.width, + "height": imageParameter.height, + "bboxSR": imageParameter.bboxSR, + "bbox": "3955850,2183600,4527300,2502700", + "format": "png", + "f": "pjson" + }; + let query = Object.keys(params) + .map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k])) + .join('&'); + url = url + '?' + query; + const response = await fetch(url); + if (response.ok) { + return response.json(); + } else { + throw new Error("HTTP error, status = " + response.status); + } + } + + async loadTextureData(imageData) { + let texture; + let elem = document.createElement('img'); + return new Promise((resolve, reject) => { + elem.onload = () => { + console.log('image completely read'); + // resolve(elem); + texture = new Texture(elem); + texture.minFilter = LinearFilter; + texture.needsUpdate = true; + resolve(texture); + } + elem.onerror = reject; + elem.src = imageData; + }); + } + + + _loadTextureData(imageData) { + let texture; + let image = document.createElement('img'); + image.src = imageData; + image.onload = () => { + console.log('file completely read'); + texture.needsUpdate = true; + }; + // image.src = imageData; + texture = new Texture(image); + texture.minFilter = LinearFilter; + return texture; + } + +} \ No newline at end of file diff --git a/src/js/layer/TinLayer.js b/src/js/layer/TinLayer.js index dab8fa9..448cd7b 100644 --- a/src/js/layer/TinLayer.js +++ b/src/js/layer/TinLayer.js @@ -2,7 +2,7 @@ import { BufferGeometry } from 'three/src/core/BufferGeometry'; import { Float32BufferAttribute, Uint16BufferAttribute } from 'three/src/core/BufferAttribute'; import { MeshStandardMaterial } from 'three/src/materials/MeshStandardMaterial'; -import { DoubleSide } from 'three/src/constants' +import { DoubleSide } from 'three/src/constants'; import { Mesh } from 'three/src/objects/Mesh'; import { Layer } from './Layer'; import { BitStream } from '../lib/bitstream'; diff --git a/src/js/lib/OrbitControls.js b/src/js/lib/OrbitControls.js index 50b61f1..f54768b 100644 --- a/src/js/lib/OrbitControls.js +++ b/src/js/lib/OrbitControls.js @@ -96,6 +96,7 @@ class OrbitControls extends EventEmitter { // Limits to how far you can dolly in and out // this.minDistance = 0; // this.maxDistance = Infinity; + this.minDistance = size*0.75; this.maxDistance = size*15; @@ -397,8 +398,10 @@ class OrbitControls extends EventEmitter { reset() { state = STATE.NONE; this.target.copy(this.target0);//0 0 0 + this.object.position.copy(this.position0); - //this.object.position.set(0, 0, 180); + // this.object.position.set(0, 0, 180); + this.update(); } diff --git a/src/js/main.js b/src/js/main.js index 769c0ce..b6fbd58 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -5,16 +5,22 @@ import { PerspectiveCamera } from 'three/src/cameras/PerspectiveCamera'; import { Scene } from 'three/src/scenes/Scene'; import { Vector3 } from 'three/src/math/Vector3'; import { TinLayer } from './layer/TinLayer'; +import { DemLayer } from './layer/DemLayer'; import { Map } from './core/Map'; import * as domEvent from './core/domEvent'; import { Coordinates } from './controls/Coordinates'; import { NortArrow } from './controls/NorthArrow'; import { LayerControl } from './controls/LayerControl'; +import { MobileDialog } from './controls/MobileDialog'; +import { BasemapControl } from './controls/BasemapControl'; import { SliderControl } from './controls/SliderControl'; import { Mesh } from 'three/src/objects/Mesh'; import { SphereGeometry } from 'three/src/geometries/SphereGeometry'; import { MeshLambertMaterial } from 'three/src/materials/MeshLambertMaterial'; import * as util from './core/utilities'; +import * as browser from './core/browser'; +import * as domUtil from './core/domUtil'; +import { BoxLayer } from './layer/BoxLayer'; import '../css/page.css'; /* style loader will import it */ @@ -49,18 +55,30 @@ class Application { this.navigation = document.getElementsByClassName('navigation')[0]; // this.addEventListeners(); + this.mapIcon = document.querySelector('#menu-map-icon'); + + this.createScene(); this.addEventListeners(); } createScene() { - let opt = { r: 200, c: 0x38eeff, o: 0.8 }; + var dirNode = document.getElementsByTagName("body")[0]; + if (browser.touch == true) { + //dirNode.setAttribute("dir", "ltr"); + domUtil.addClass(dirNode, "touch"); + } else { + domUtil.addClass(dirNode, "notouch"); + } + + // let opt = { r: 200, c: 0x38eeff, o: 0.8 }; + var opt = { r: 5, c: 0xffff00, o: 1 }; this.queryMarker = new Mesh(new SphereGeometry(opt.r), - new MeshLambertMaterial({ color: opt.c, opacity: opt.o, transparent: false })); + new MeshLambertMaterial({ color: opt.c, opacity: opt.o, transparent: (opt.o < 1) })); this.queryMarker.visible = true; - this.queryMarker.position.set(4282010, 2302070, -13616.3); + // this.queryMarker.position.set(4282010, 2302070, -13616.3); /* Renderer */ // var bgcolor = 0xfdfdfd; let bgcolor = 0xfdfdfd; @@ -97,15 +115,17 @@ class Application { this.camera = new PerspectiveCamera(30, this.width / this.height, 100, 100000); - const dirLight = new DirectionalLight(0xffffff, 1); - dirLight.position.set(585000 + 10000, 6135000 + 10000, -500 + 5000); - this.camera.add(dirLight); + // const dirLight = new DirectionalLight(0xffffff, 1); + // dirLight.position.set(585000 + 10000, 6135000 + 10000, -500 + 5000); + // this.camera.add(dirLight); let x = { min: 3955850, max: 4527300, avg: 4282010 }; let y = { min: 2183600, max: 2502700, avg: 2302070 }; let z = { min: -60066, max: 3574.94, avg: -13616.3 }; - const center = new Vector3(x.avg, y.avg, 1000); + const center = new Vector3 ( (x.min + x.max) / 2, (y.min + y.max) / 2, z.avg ); + // const center = new Vector3(x.avg, y.avg, z.avg); const size = Math.max(x.max - x.min, y.max - y.min, z.max - z.min); + const camDirection = new Vector3(-0.5, -Math.SQRT1_2, 0.5); const camOffset = camDirection.multiplyScalar(size * 2); this.camera.position.copy(center); @@ -115,26 +135,72 @@ class Application { this.camera.far = size * 25; this.camera.updateProjectionMatrix(); + + /* Camera */ + // // const center = new Vector3(); + // var angle = 45; + // var aspect = this.width / this.height; + // var near = 0.1; //This is the distance at which the camera will start rendering scene objects + // var far = 2000; //Anything beyond this distance will not be rendered + // this.camera = new PerspectiveCamera(angle, aspect, near, far); + // this.camera.position.set(0, -0.1, 150); + // this.camera.lookAt(new Vector3(0, 0, 0)); + // create map this.map = new Map(size, center, this.camera, this.scene, this.renderer.domElement, this.container); // this.map.minDistance = size*0.75; // this.map.maxDistance = size*15; + // let boxLayer = new BoxLayer({ + // width: 10000, height: 10000, depth: 10000, name: 'test-box', color: 800080 + // }); + // this.map.addLayer(boxLayer); + //add map controls: if (util.hasTouch() == false) { let coordinates = new Coordinates({ camera: this.camera, crs: "EPSG:3034" }).addTo(this.map); - // coordinates.addListener('onPoint', (vector) => { - // this.queryMarker.position.set(vector.x, vector.y, vector.z); + // coordinates.addListener('onPoint', (args) => { + // let vector = args[0]; + // this.queryMarker.position.set(vector.x, vector.y, vector.z); // // this.queryMarker.updateMatrixWorld(); // this.animate(); // }, this); } this.northArrow = new NortArrow({ headLength: 1, headWidth: 1 }).addTo(this.map); + // this.dialog = new MobileDialog("Help", { klass: "fm_about", parentDiv: 'basemap-control-parent' }).addTo(this.map); + + let demLayer = new DemLayer({ + q: 0, shading: true, type: 'dem', name: 'DEM Layer', color: 16382457, + "materialParameter": [{ + "i": 0, + "materialtypee": 0, + "ds": 1, + "bottomZ": 3000, //-18.70583629319634 + }] + }); + demLayer.addBlock({ + "width": 226, + "plane": { + "width": x.max - x.min, //100.0, + // "offsetX": 0, + // "offsetY": 0, + // "offsetX" : x.avg, + // "offsetY" : y.avg, + "offsetX" : center.x, + "offsetY" : center.y, + "height": y.max - y.min, //78.59618717504333 + }, + "dem_values": [], + "height": 178 + }); + this.map.addLayer(demLayer); + this.map.currentBasemap = demLayer; + let dxf134Layer = new TinLayer({ geomId: 134, q: true, type: "3dface", name: "South Alpine Superunit", description: "test", color: "907A5C" }); - this.map.addLayer(dxf134Layer); + this.map.addLayer(dxf134Layer); let dxf135Layer = new TinLayer({ geomId: 135, q: true, type: "3dface", name: "Adriatic Plate", description: "test2", color: "A0512D" @@ -166,6 +232,10 @@ class Application { parentDiv: 'layer-control-parent-id' }).addTo(this.map); + this.basemapControl = new BasemapControl('Baselayer', { + parentDiv: 'basemap-control-parent' + }).addTo(this.map); + //slider for scaling z value this.slider = new SliderControl({ layers: this.map.layers }).addTo(this.map); @@ -260,6 +330,10 @@ class Application { addEventListeners() { + domEvent.on(this.mapIcon, 'click', () => { + this.basemapControl.show(); + }, this); + domEvent.on(window, 'resize', this.onWindowResize, this); domEvent.on(window, 'keydown', this.keydown, this);