From 065125ae2159617a2dfa2d7e58a336c29d7d3907 Mon Sep 17 00:00:00 2001 From: Steven Kalt Date: Sat, 26 Oct 2019 00:49:57 -0400 Subject: [PATCH 1/8] serve local mapbox-gl --- mbview.js | 2 +- package-lock.json | 307 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 2 + views/vector.ejs | 4 +- 4 files changed, 309 insertions(+), 6 deletions(-) diff --git a/mbview.js b/mbview.js index aa0affc..6c54352 100644 --- a/mbview.js +++ b/mbview.js @@ -10,7 +10,7 @@ const objectAssign = require('object-assign'); app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); -app.use(express.static('public')); +app.use(express.static('node_modules/mapbox-gl/dist')); module.exports = { diff --git a/package-lock.json b/package-lock.json index 130c376..11647fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@mapbox/mbview", - "version": "3.0.0", + "version": "4.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -30,6 +30,40 @@ "integrity": "sha512-ePF1eyW3tv2q5up5K0K4gi+81Bo5yxVdVdUO5PJSnNpvIxb8aqEixDjIkMrlf2eZM7G1miIgaCI6A9/qfH20zg==", "dev": true }, + "@mapbox/geojson-area": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-area/-/geojson-area-0.2.2.tgz", + "integrity": "sha1-GNeBSqNr8j+7zDefjiaiKSfevxA=", + "requires": { + "wgs84": "0.0.0" + } + }, + "@mapbox/geojson-rewind": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.4.0.tgz", + "integrity": "sha512-b+1uPWBERW4Pet/969BNu61ZPDyH2ilIxBjJDFzxyS9TyszF9UrTQyYIl/G38clux3rtpAGGFSGTCSF/qR6UjA==", + "requires": { + "@mapbox/geojson-area": "0.2.2", + "concat-stream": "~1.6.0", + "minimist": "1.2.0", + "sharkdown": "^0.1.0" + } + }, + "@mapbox/geojson-types": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz", + "integrity": "sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==" + }, + "@mapbox/jsonlint-lines-primitives": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", + "integrity": "sha1-zlblOfg1UrWNENZy6k1vya3HsjQ=" + }, + "@mapbox/mapbox-gl-supported": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.4.1.tgz", + "integrity": "sha512-yyKza9S6z3ELKuf6w5n6VNUB0Osu6Z93RXPfMHLIlNWohu3KqxewLOq4lMXseYJ92GwkRAxd207Pr/Z98cwmvw==" + }, "@mapbox/mbtiles": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@mapbox/mbtiles/-/mbtiles-0.11.0.tgz", @@ -48,6 +82,11 @@ } } }, + "@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI=" + }, "@mapbox/sphericalmercator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@mapbox/sphericalmercator/-/sphericalmercator-1.1.0.tgz", @@ -58,6 +97,41 @@ "resolved": "https://registry.npmjs.org/@mapbox/tiletype/-/tiletype-0.3.1.tgz", "integrity": "sha1-GhSY9qG3d2MOC006L+2dlJWVYMw=" }, + "@mapbox/tiny-sdf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.1.1.tgz", + "integrity": "sha512-Ihn1nZcGIswJ5XGbgFAvVumOgWpvIjBX9jiRlIl46uQG9vJOF51ViBYHF95rEZupuyQbEmhLaDPLQlU7fUTsBg==" + }, + "@mapbox/unitbezier": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", + "integrity": "sha1-FWUb1VOme4WB+zmIEMmK2Go0Uk4=" + }, + "@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "requires": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "@mapbox/whoots-js": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", + "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==" + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/node": { + "version": "12.11.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.11.7.tgz", + "integrity": "sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA==", + "dev": true + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -130,6 +204,11 @@ "color-convert": "^1.9.0" } }, + "ansicolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz", + "integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8=" + }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", @@ -238,6 +317,11 @@ "concat-map": "0.0.1" } }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -249,6 +333,15 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, + "cardinal": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-0.4.4.tgz", + "integrity": "sha1-ylu2iltRG5D+k7ms6km97lwyv+I=", + "requires": { + "ansicolors": "~0.2.1", + "redeyed": "~0.4.0" + } + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -330,6 +423,17 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -382,6 +486,11 @@ "which": "^1.2.9" } }, + "csscolorparser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", + "integrity": "sha1-s085HupNqPPpgjHizNjfnAQfFxs=" + }, "d3-queue": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-3.0.7.tgz", @@ -469,6 +578,11 @@ "esutils": "^2.0.2" } }, + "earcut": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.1.tgz", + "integrity": "sha512-5jIMi2RB3HtGPHcYd9Yyl0cczo84y+48lgKPxMijliNQaKAHEZJbdzLmKmdxG/mCdS/YD9DQ1gihL8mxzR0F9w==" + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -961,6 +1075,11 @@ "wide-align": "^1.1.0" } }, + "geojson-vt": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", + "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" + }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -969,6 +1088,11 @@ "assert-plus": "^1.0.0" } }, + "gl-matrix": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.1.0.tgz", + "integrity": "sha512-526NA+3EA+ztAQi0IZpSWiM0fyQXIp7IbRvfJ4wS/TjjQD0uv0fVybXwwqqSOlq33UckivI0yMDlVtboWm3k7A==" + }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -997,6 +1121,11 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, + "grid-index": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz", + "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==" + }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -1067,6 +1196,11 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -1332,6 +1466,11 @@ "verror": "1.10.0" } }, + "kdbush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", + "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==" + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -1348,6 +1487,43 @@ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, + "mapbox-gl": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-1.5.0.tgz", + "integrity": "sha512-seTQUttE7XaL93on+zfLv06HmROsIdTh3riEPrBdbylSirLmBRnofG+iV873ZbJQElf+d2USyHpWAJm37RehEQ==", + "requires": { + "@mapbox/geojson-rewind": "^0.4.0", + "@mapbox/geojson-types": "^1.0.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^1.4.0", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^1.1.0", + "@mapbox/unitbezier": "^0.0.0", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "csscolorparser": "~1.0.2", + "earcut": "^2.2.0", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.0.0", + "grid-index": "^1.1.0", + "minimist": "0.0.8", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^1.0.1", + "quickselect": "^2.0.0", + "rw": "^1.3.3", + "supercluster": "^6.0.1", + "tinyqueue": "^2.0.0", + "vt-pbf": "^3.1.1" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -1437,6 +1613,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "murmurhash-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", + "integrity": "sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E=" + }, "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", @@ -1670,11 +1851,25 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "pbf": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "requires": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + } + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "potpack": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.1.tgz", + "integrity": "sha512-15vItUAbViaYrmaB/Pbw7z6qX2xENbFSTA7Ii4tgbPtasxm5v6ryKhKtL91tpWovDJzTiZqdwzhcFBCwiMVdVw==" + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -1692,6 +1887,11 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "protocol-buffers-schema": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.3.2.tgz", + "integrity": "sha512-Xdayp8sB/mU+sUV4G7ws8xtYMGdQnxbeIfLjyO9TZZRJdztBGhlmbI5x1qcY4TG5hBkIKGnc28i7nXxaugu88w==" + }, "proxy-addr": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", @@ -1716,6 +1916,11 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, + "quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -1757,6 +1962,21 @@ "util-deprecate": "~1.0.1" } }, + "redeyed": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-0.4.4.tgz", + "integrity": "sha1-N+mQpvKyGyoRwuakj9QTVpjLqX8=", + "requires": { + "esprima": "~1.0.4" + }, + "dependencies": { + "esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=" + } + } + }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", @@ -1805,6 +2025,14 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "requires": { + "protocol-buffers-schema": "^3.3.1" + } + }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -1832,6 +2060,17 @@ "glob": "^7.1.3" } }, + "rollup": { + "version": "1.25.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.25.2.tgz", + "integrity": "sha512-+7z6Wab/L45QCPcfpuTZKwKiB0tynj05s/+s2U3F2Bi7rOLPr9UcjUwO7/xpjlPNXA/hwnth6jBExFRGyf3tMg==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/node": "*", + "acorn": "^7.1.0" + } + }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -1841,6 +2080,11 @@ "is-promise": "^2.1.0" } }, + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" + }, "rxjs": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", @@ -1918,6 +2162,23 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, + "sharkdown": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/sharkdown/-/sharkdown-0.1.1.tgz", + "integrity": "sha512-exwooSpmo5s45lrexgz6Q0rFQM574wYIX3iDZ7RLLqOb7IAoQZu9nxlZODU972g19sR69OIpKP2cpHTzU+PHIg==", + "requires": { + "cardinal": "~0.4.2", + "minimist": "0.0.5", + "split": "~0.2.10" + }, + "dependencies": { + "minimist": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz", + "integrity": "sha1-16oye87PUY+RBqxrjwA/o7zqhWY=" + } + } + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -1957,6 +2218,14 @@ } } }, + "split": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz", + "integrity": "sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=", + "requires": { + "through": "2" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -2091,6 +2360,14 @@ } } }, + "supercluster": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-6.0.2.tgz", + "integrity": "sha512-aa0v2HURjBTOpbcknilcfxGDuArM8khklKSmZ/T8ZXL0BuRwb5aRw95lz+2bmWpFvCXDX/+FzqHxmg0TIaJErw==", + "requires": { + "kdbush": "^3.0.0" + } + }, "supertest": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/supertest/-/supertest-4.0.2.tgz", @@ -2243,8 +2520,12 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "tinyqueue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" }, "tmp": { "version": "0.0.33", @@ -2328,6 +2609,11 @@ } } }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -2377,6 +2663,21 @@ "extsprintf": "^1.2.0" } }, + "vt-pbf": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.1.tgz", + "integrity": "sha512-pHjWdrIoxurpmTcbfBWXaPwSmtPAHS105253P1qyEfSTV2HJddqjM+kIHquaT/L6lVJIk9ltTGc0IxR/G47hYA==", + "requires": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.0.5" + } + }, + "wgs84": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/wgs84/-/wgs84-0.0.0.tgz", + "integrity": "sha1-NP3FVZF7blfPKigu0ENxDASc3HY=" + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", diff --git a/package.json b/package.json index 0725158..c943591 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "@mapbox/eslint-config-mapbox": "^2.0.1", "eslint": "^6.4.0", "eslint-plugin-node": "^10.0.0", + "rollup": "^1.25.2", "supertest": "^4.0.2", "tape": "^4.11.0" }, @@ -31,6 +32,7 @@ "d3-queue": "^3.0.7", "ejs": "^2.7.1", "express": "^4.17.1", + "mapbox-gl": "^1.5.0", "minimist": "^1.2.0", "object-assign": "^4.1.1", "open": "^6.4.0" diff --git a/views/vector.ejs b/views/vector.ejs index 3d8d778..0cbee86 100644 --- a/views/vector.ejs +++ b/views/vector.ejs @@ -4,8 +4,8 @@ mbview - vector - - + + + + + + + + +
+ + + + + diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 0000000..4f700f4 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,39 @@ +import postcss from 'rollup-plugin-postcss' +import resolve from 'rollup-plugin-node-resolve' +import commonjs from 'rollup-plugin-commonjs'; +import json from 'rollup-plugin-json' +import path from 'path' + +const dir = 'dist' +const input = 'src/main.js' +const sourcemap = true +const sharedPlugins = () => [json(), postcss(), resolve(), commonjs()] +export default [ + { + input, + plugins: [...sharedPlugins()], + output: { + dir: 'public', + format: 'esm', + sourcemap, + }, + manualChunks(id) { + // from https://philipwalton.com/articles/using-native-javascript-modules-in-production-today/ + if (id.includes('node_modules')) { + // Return the directory name following the last `node_modules`. + // Usually this is the package, but it could also be the scope. + const dirs = id.split(path.sep); + return dirs[dirs.lastIndexOf('node_modules') + 1]; + } + } + }, { + input, + plugins: [...sharedPlugins()], + output: { + name: 'app', + file: 'public/main.umd.js', + format: 'umd', + sourcemap, + }, + } +] \ No newline at end of file diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..5e6db87 --- /dev/null +++ b/src/main.js @@ -0,0 +1,258 @@ +/* global CENTER, ZOOM, BASEMAP, SOURCES, PORT, ACCESS_TOKEN */ +import mapboxgl from 'mapbox-gl' +import 'mapbox-gl/dist/mapbox-gl.css' +import '@mapbox/assembly/dist/assembly.js' // loads svg sprites +import '@mapbox/assembly/dist/assembly.css' + +if (ACCESS_TOKEN) mapboxgl.accessToken = ACCESS_TOKEN; + +const map = new mapboxgl.Map({ + container: 'map', + style: Boolean(ACCESS_TOKEN) && navigator.onLine && BASEMAP, + center: CENTER, + zoom: ZOOM, + hash: true, + maxZoom: 30 +}); + +const layers = { + pts: [], + lines: [], + polygons: [] +} + +const lightColors = [ + 'FC49A3', // pink + 'CC66FF', // purple-ish + '66CCFF', // sky blue + '66FFCC', // teal + '00FF00', // lime green + 'FFCC66', // light orange + 'FF6666', // salmon + 'FF0000', // red + 'FF8000', // orange + 'FFFF66', // yellow + '00FFFF' // turquoise +]; + +function randomColor(colors) { + const randomNumber = parseInt(Math.random() * colors.length); + return colors[randomNumber]; +} + +map.on('load', function () { + Object.keys(SOURCES).forEach(function (sid) { + + map.addSource(sid, { + type: 'vector', + tiles: [ + `http://localhost:${PORT}/${sid}/{z}/{x}/{y}.pbf` + ], + maxzoom: SOURCES[sid].maxzoom + }); + + SOURCES[sid].vector_layers.forEach(function (layer) { + + const layerColor = '#' + randomColor(lightColors); + + map.addLayer({ + 'id': `${layer.id}-polygons`, + 'type': 'fill', + 'source': sid, + 'source-layer': layer.id, + 'filter': ["==", "$type", "Polygon"], + 'layout': {}, + 'paint': { + 'fill-opacity': 0.1, + 'fill-color': layerColor + } + }); + + map.addLayer({ + 'id': `${layer.id}-polygons-outline`, + 'type': 'line', + 'source': sid, + 'source-layer': layer.id, + 'filter': ["==", "$type", "Polygon"], + 'layout': { + 'line-join': 'round', + 'line-cap': 'round' + }, + 'paint': { + 'line-color': layerColor, + 'line-width': 1, + 'line-opacity': 0.75 + } + }); + + map.addLayer({ + 'id': `${layer.id}-lines`, + 'type': 'line', + 'source': sid, + 'source-layer': layer.id, + 'filter': ["==", "$type", "LineString"], + 'layout': { + 'line-join': 'round', + 'line-cap': 'round' + }, + 'paint': { + 'line-color': layerColor, + 'line-width': 1, + 'line-opacity': 0.75 + } + }); + + map.addLayer({ + 'id': `${layer.id}-pts`, + 'type': 'circle', + 'source': sid, + 'source-layer': layer.id, + 'filter': ["==", "$type", "Point"], + 'paint': { + 'circle-color': layerColor, + 'circle-radius': 2.5, + 'circle-opacity': 0.75 + } + }); + + layers.polygons.push(`${layer.id}-polygons`); + layers.polygons.push(`${layer.id}-polygons-outline`); + layers.lines.push(`${layer.id}-lines`); + layers.pts.push(`${layer.id}-pts`); + + }); + }); +}); + + +function displayValue(value) { + if (typeof value === 'undefined' || value === null) return value; + if (typeof value === 'object' || + typeof value === 'number' || + typeof value === 'string') return value.toString(); + return value; +} + +function renderProperty(propertyName, property) { + return ` +
+
${propertyName}
+
${displayValue(property)}
+
+ `; +} + +function renderLayer(layerId) { + return `
${layerId}
`; +} + +function renderProperties(feature) { + const sourceProperty = renderLayer(feature.layer['source-layer'] || feature.layer.source); + const idProperty = renderProperty('$id', feature.id); + const typeProperty = renderProperty('$type', feature.geometry.type); + const properties = Object.keys(feature.properties).map(function (propertyName) { + return renderProperty(propertyName, feature.properties[propertyName]); + }); + return (feature.id ? [sourceProperty, idProperty, typeProperty] + : [sourceProperty, typeProperty]).concat(properties).join(''); +} + +function renderFeatures(features) { + return features.map(function (ft) { + return `
${renderProperties(ft)}
`; + }).join(''); +} + +function renderPopup(features) { + return `
${renderFeatures(features)}
`; +} + +const popup = new mapboxgl.Popup({ + closeButton: false, + closeOnClick: false +}); + +let wantPopup = false; + +map.on('mousemove', function (e) { + // set a bbox around the pointer + const selectThreshold = 3; + const queryBox = [ + [ + e.point.x - selectThreshold, + e.point.y + selectThreshold + ], // bottom left (SW) + [ + e.point.x + selectThreshold, + e.point.y - selectThreshold + ] // top right (NE) + ]; + + const features = map.queryRenderedFeatures(queryBox, { + layers: layers.polygons.concat(layers.lines.concat(layers.pts)) + }) || []; + map.getCanvas().style.cursor = (features.length) ? 'pointer' : ''; + + if (!features.length || !wantPopup) { + popup.remove(); + } else { + popup.setLngLat(e.lngLat) + .setHTML(renderPopup(features)) + .addTo(map); + } +}); + + + +// Show and hide hamburger menu as needed +const menuBtn = document.querySelector("#menu"); +const menu = document.querySelector("#menu-container"); +menuBtn.addEventListener('click', function () { + popup.remove(); + if (menuBtn.className.indexOf('active') > -1) { + //Hide Menu + menuBtn.className = ''; + menu.style.display = 'none'; + } else { + //Show Menu + menuBtn.className = 'active'; + menu.style.display = 'block'; + + } +}, false); + +// Menu-Filter Module +function menuFilter() { + if (document.querySelector("#filter-all").checked) { + paint(layers.pts, 'visible'); + paint(layers.lines, 'visible'); + paint(layers.polygons, 'visible'); + } else if (document.querySelector("#filter-pts").checked) { + paint(layers.pts, 'visible'); + paint(layers.lines, 'none'); + paint(layers.polygons, 'none'); + } else if (document.querySelector("#filter-lines").checked) { + paint(layers.pts, 'none'); + paint(layers.lines, 'visible'); + paint(layers.polygons, 'none'); + } else if (document.querySelector("#filter-polygons").checked) { + paint(layers.pts, 'none'); + paint(layers.lines, 'none'); + paint(layers.polygons, 'visible'); + } + + function paint(layers, val) { + layers.forEach(function (layer) { + map.setLayoutProperty(layer, 'visibility', val) + }); + } +} + +function menuPopup() { + wantPopup = document.querySelector("#show-popup").checked; +} + +document.getElementById('menu-filter').addEventListener('change', menuFilter) +document.getElementById('menu-popup').addEventListener('change', menuPopup) + +window.app = {map, layers, get wantPopup(){return wantPopup}, popup} \ No newline at end of file diff --git a/utils.js b/utils.js index aea6bb7..888d6fe 100644 --- a/utils.js +++ b/utils.js @@ -2,6 +2,7 @@ const fs = require('fs'); const objectAssign = require('object-assign'); +const dedent = require('dedent') /** * Merge a configuration with tileset objects and @@ -30,17 +31,17 @@ module.exports.mergeConfigurations = function (config, tilesets) { * @return {String} the instructions to run this thing */ module.exports.usage = function () { - const u = []; - u.push('usage: mbview [options] [files]'); - u.push(''); - u.push(' --port sets port to use (default: 3000)'); - u.push(' --quiet or -q supress all logging except the address to visit'); - u.push(' -n don\'t automatically open the browser on start'); - u.push(' --basemap, --base or --map sets the basemap style (default: dark)'); - u.push(' --version returns module version'); - u.push(' --help prints this message'); - u.push(''); - return u.join('\n'); + return dedent` + usage: mbview [options] [files] + + --port sets port to use (default: 3000) + --center sets the map center (default: "-122.42,37.75") + --quiet or -q supress all logging except the address to visit + -n don\'t automatically open the browser on start + --basemap, --base or --map sets the basemap style (default: dark) + --version returns module version + --help prints this message + ` }; /** From a200ef5b10a47a1af27e48a0d83bd415aa0ead64 Mon Sep 17 00:00:00 2001 From: Steven Kalt Date: Sun, 27 Oct 2019 16:39:35 -0400 Subject: [PATCH 3/8] fixed styling menu styling --- public/index.html | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/public/index.html b/public/index.html index 392160a..831eca0 100644 --- a/public/index.html +++ b/public/index.html @@ -79,21 +79,32 @@