Add alternate 2D map mode with Leaflet, improve settings page

master
Skylar Ittner 5 years ago
parent b3e3ad4660
commit b1552857c0

@ -14,7 +14,7 @@ rm -r ./{ansicolors,buffer-from,canvas-renderer,cardinal,concat-stream,core-util
rm -r ./{earcut,esm,esprima,geojson-vt,gl-matrix,grid-index,ieee754,inherits,isarray,kdbush,@mapbox,minimist,murmurhash-js}
rm -r ./{path-to-regexp,pbf,potpack,process-nextick-args,protocol-buffers-schema,quickselect}
rm -r ./{readable-stream,redeyed,resolve-protobuf-schema,rw,safe-buffer,sharkdown,split,ssr-window,string_decoder}
rm -r ./{supercluster,template7,through,tinyqueue,typedarray,util-deprecate,vt-pbf,wgs84}
rm -r ./{supercluster,template7,through,tinyqueue,topojson-client,typedarray,util-deprecate,vector-tile,vt-pbf,whatwg-fetch,wgs84}
rm -r @fortawesome/fontawesome-free/{js,less,scss,sprites,svgs}
rm -r @fortawesome/fontawesome-free/css/{all.css,brands.css,brands.min.css,fontawesome.css,fontawesome.min.css,regular.css,\
@ -34,6 +34,11 @@ rm -r mapbox-gl/{build,CHANGELOG.md,flow-typed,node_modules,src}
rm -r mapbox-gl/dist/{mapbox-gl-csp.js,mapbox-gl-csp.js.map,mapbox-gl-csp-worker.js,mapbox-gl-csp-worker.js.map,mapbox-gl-dev.js,\
mapbox-gl-dev.js.flow,mapbox-gl.js.flow,mapbox-gl.js.map,mapbox-gl-unminified.js,mapbox-gl-unminified.js.map,style-spec}
rm -r leaflet/src
rm -r leaflet/dist/{leaflet.js.map,leaflet-src.esm.js,leaflet-src.esm.js.map,leaflet-src.js,leaflet-src.js.map}
rm -r leaflet.vectorgrid/{docs,leafdoc-templates,node_modules,package.json,README.md,src}
rm -r leaflet.vectorgrid/dist/{Leaflet.VectorGrid.bundled.js.map,Leaflet.VectorGrid.bundled.min.js,Leaflet.VectorGrid.js,Leaflet.VectorGrid.js.map,Leaflet.VectorGrid.min.js,vectorgrid-api-docs.html}
echo "Size after: $(du -sh | cut -d ' ' -f 1)"
echo "Cleanup complete!"

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

@ -13,6 +13,7 @@
<link rel="stylesheet" href="node_modules/framework7/css/framework7.bundle.min.css">
<link rel="stylesheet" href="node_modules/@fortawesome/fontawesome-free/css/all.min.css">
<link rel="stylesheet" href="node_modules/mapbox-gl/dist/mapbox-gl.css">
<link rel="stylesheet" href="node_modules/leaflet/dist/leaflet.css">
<link rel="stylesheet" href="css/app.css">
<link rel="stylesheet" href="css/home.css">
<link rel="stylesheet" href="css/map.css">
@ -31,8 +32,13 @@
<script src="node_modules/jquery/dist/jquery.min.js"></script>
<script src="node_modules/framework7/js/framework7.bundle.min.js"></script>
<script src="node_modules/mapbox-gl/dist/mapbox-gl.js"></script>
<script src="node_modules/leaflet/dist/leaflet.js"></script>
<script src="node_modules/leaflet.vectorgrid/dist/Leaflet.VectorGrid.bundled.js"></script>
<script src="node_modules/jdenticon/dist/jdenticon.min.js"></script>
<script src="js/map_mapbox.js"></script>
<script src="js/map_leaflet.js"></script>
<script src="settings.js"></script>
<script src="js/api.js"></script>
<script src="routes.js"></script>

@ -4,62 +4,22 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
mapboxgl.accessToken = '';
const map = new mapboxgl.Map({
container: 'mapbox',
style: SETTINGS['map_style_json'],
attributionControl: false,
dragPan: false,
pitch: 0,
zoom: 0,
maxZoom: 20
});
var dpPoint = null;
var dpPitch = null;
map.on('touchstart', function (data) {
if (data.points.length == 2) {
var diff = Math.abs(data.points[0].y - data.points[1].y);
if (diff <= 50) {
dpPoint = data.point;
map.touchZoomRotate.disable();
dpPitch = map.getPitch();
}
}
});
map.on('touchmove', function (data) {
if (dpPoint) {
data.preventDefault();
var pitchdiff = (dpPoint.y - data.point.y) * 0.5;
map.setPitch(dpPitch + pitchdiff);
}
});
var gotfirstfix = false;
map.on('touchend', function (data) {
if (dpPoint) {
map.touchZoomRotate.enable();
}
dpPoint = null;
dpPitch = null;
});
var geoerrorcount = 0;
map.on('touchcancel', function (data) {
if (dpPoint) {
map.touchZoomRotate.enable();
}
dpPoint = null;
dpPitch = null;
});
var gamemaptype = "mapbox";
function mapEasing(t) {
return t * (2 - t);
if (localStorage.getItem("litemode") == "true") {
gamemaptype = "leaflet";
}
var gotfirstfix = false;
var geoerrorcount = 0;
if (gamemaptype == "leaflet") {
var map = leafletMap();
} else {
var map = mapboxMap();
}
watchLocation(function (position) {
if (gotfirstfix) {
@ -85,21 +45,11 @@ watchLocation(function (position) {
});
function setMapHeading(heading) {
if (typeof heading == 'number') {
map.easeTo({
bearing: heading,
easing: mapEasing
});
}
map.setHeading(heading);
}
function setMapLocation(latitude, longitude) {
map.easeTo({
center: [
longitude,
latitude
]
});
map.setMapLocation(latitude, longitude);
}
function updatePlaceLayer(latitude, longitude) {
@ -110,28 +60,7 @@ function updatePlaceLayer(latitude, longitude) {
longitude: longitude,
radius: 5
}, function (data) {
var oldmarkers = document.getElementsByClassName("place-marker");
if (oldmarkers.length > 0) {
markerparent = oldmarkers[0].parentNode;
while (oldmarkers.length > 0) {
markerparent.removeChild(oldmarkers[0]);
}
}
data.features.forEach(function (place) {
var el = document.createElement("div");
el.className = "place-marker";
if (place.properties.teamid != null && place.properties.teamid > 0) {
el.className += " place-color-" + SETTINGS["teams"][place.properties.teamid]["color"];
}
el.addEventListener('click', function () {
openPlace(place.properties.id, place.properties.name);
});
new mapboxgl.Marker(el)
.setLngLat(place.geometry.coordinates)
.addTo(map);
});
map.updatePlaceLayer(data);
});
}
@ -142,19 +71,5 @@ function animateMapIn(latitude, longitude, zoom, heading) {
if (typeof heading == 'undefined') {
heading = 0;
}
map.flyTo({
center: [
longitude,
latitude
],
speed: 0.7,
zoom: zoom,
heading: heading,
pitch: 45
});
// Set min zoom after some time to fly in
setTimeout(function () {
map.setMinZoom(16);
map.setPitch(45);
}, 1000);
map.animateMapIn(latitude, longitude, zoom, heading);
}

@ -0,0 +1,160 @@
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
function leafletMap() {
var map = L.map('mapbox', {
zoomSnap: 0.25,
zoomControl: false,
attributionControl: false
});
map.placelayer = L.layerGroup();
map.placelayer.addTo(map);
$("#mapbox").css("background-color", "#6cdc9b");
$("#mapbox").css("background-image", "url(img/map/ground.png)");
// Prevent roads and stuff from appearing above UI
$("#mapbox").css("z-index", "-9999");
var openmaptilesUrl = SETTINGS['map_pbf_url'];
var vectorTileStyling = {
water: {
fill: true,
weight: 1,
fillColor: '#76FFFF',
color: '#76FFFF',
fillOpacity: 1,
opacity: 1
},
admin: [],
waterway: {
weight: 1,
fillColor: '#76FFFF',
color: '#76FFFF',
fillOpacity: 1,
opacity: 1
},
landcover: {
fill: true,
weight: 1,
fillColor: '#62CF80',
color: '#62CF80',
fillOpacity: 0.5,
opacity: 0.5,
},
landuse: [],
park: {
fill: true,
weight: 1,
fillColor: '#62CF80',
color: '#62CF80',
fillOpacity: 0.5,
opacity: 0.5
},
boundary: [],
aeroway: [],
transportation: {
weight: 2,
fillColor: '#FEC481',
color: '#FEC481',
fillOpacity: 1,
opacity: 1,
},
building: {
fill: true,
weight: 1,
fillColor: '#c0e3e9',
color: '#c0e3e9',
fillOpacity: 0.5,
opacity: 0.5
},
water_name: [],
transportation_name: [],
place: [],
housenumber: [],
poi: [],
country_name: [],
marine_name: [],
state_name: [],
place_name: [],
waterway_name: [],
poi_name: [],
road_name: [],
housenum_name: []
};
var openmaptilesVectorTileOptions = {
rendererFactory: L.svg.tile,
attribution: '',
vectorTileLayerStyles: vectorTileStyling,
maxNativeZoom: 14,
maxZoom: 20
};
var openmaptilesPbfLayer = L.vectorGrid.protobuf(openmaptilesUrl, openmaptilesVectorTileOptions).addTo(map);
map.setView({lat: 0, lng: 0}, 1);
map.setMapHeading = function (heading) {
}
map.setMapLocation = function (latitude, longitude) {
map.setView({
lng: longitude,
lat: latitude
});
}
map.updatePlaceLayer = function (data) {
map.placelayer.clearLayers();
data.features.forEach(function (place) {
var color = "white";
if (place.properties.teamid != null && place.properties.teamid > 0) {
color = SETTINGS["teams"][place.properties.teamid]["color"];
}
var icon = L.icon({
iconUrl: "img/place/" + color + ".png",
iconSize: [50, 50],
iconAnchor: [25, 10]
});
L.marker(
[
place.geometry.coordinates[1],
place.geometry.coordinates[0]
],
{
icon: icon
})
.on('click', function () {
openPlace(place.properties.id, place.properties.name);
})
.addTo(map.placelayer);
});
}
map.animateMapIn = function (latitude, longitude, zoom, heading) {
if (typeof zoom == 'undefined') {
zoom = 17;
}
if (typeof heading == 'undefined') {
heading = 0;
}
map.flyTo([latitude, longitude], zoom);
// Set min zoom after some time to fly in
setTimeout(function () {
map.setMinZoom(14);
map.setZoom(zoom);
}, 1000);
}
return map;
}

@ -0,0 +1,130 @@
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
function mapboxMap() {
mapboxgl.accessToken = '';
var map = new mapboxgl.Map({
container: 'mapbox',
style: SETTINGS['map_style_json'],
attributionControl: false,
dragPan: false,
pitch: 0,
zoom: 0,
maxZoom: 20
});
map.mapEasing = function (t) {
return t * (2 - t);
}
map.setMapHeading = function (heading) {
if (typeof heading == 'number') {
map.easeTo({
bearing: heading,
easing: map.mapEasing
});
}
}
map.setMapLocation = function (latitude, longitude) {
map.easeTo({
center: [
longitude,
latitude
]
});
}
map.updatePlaceLayer = function (data) {
var oldmarkers = document.getElementsByClassName("place-marker");
if (oldmarkers.length > 0) {
markerparent = oldmarkers[0].parentNode;
while (oldmarkers.length > 0) {
markerparent.removeChild(oldmarkers[0]);
}
}
data.features.forEach(function (place) {
var el = document.createElement("div");
el.className = "place-marker";
if (place.properties.teamid != null && place.properties.teamid > 0) {
el.className += " place-color-" + SETTINGS["teams"][place.properties.teamid]["color"];
}
el.addEventListener('click', function () {
openPlace(place.properties.id, place.properties.name);
});
new mapboxgl.Marker(el)
.setLngLat(place.geometry.coordinates)
.addTo(map);
});
}
map.animateMapIn = function (latitude, longitude, zoom, heading) {
if (typeof zoom == 'undefined') {
zoom = 17;
}
if (typeof heading == 'undefined') {
heading = 0;
}
map.flyTo({
center: [
longitude,
latitude
],
speed: 0.7,
zoom: zoom,
heading: heading,
pitch: 45
});
// Set min zoom after some time to fly in
setTimeout(function () {
map.setMinZoom(15);
map.setPitch(45);
map.setZoom(zoom);
}, 1000);
}
var dpPoint = null;
var dpPitch = null;
map.on('touchstart', function (data) {
if (data.points.length == 2) {
var diff = Math.abs(data.points[0].y - data.points[1].y);
if (diff <= 50) {
dpPoint = data.point;
map.touchZoomRotate.disable();
dpPitch = map.getPitch();
}
}
});
map.on('touchmove', function (data) {
if (dpPoint) {
data.preventDefault();
var pitchdiff = (dpPoint.y - data.point.y) * 0.5;
map.setPitch(dpPitch + pitchdiff);
}
});
map.on('touchend', function (data) {
if (dpPoint) {
map.touchZoomRotate.enable();
}
dpPoint = null;
dpPitch = null;
});
map.on('touchcancel', function (data) {
if (dpPoint) {
map.touchZoomRotate.enable();
}
dpPoint = null;
dpPitch = null;
});
return map;
}

@ -7,12 +7,13 @@
var settings = [
{
setting: "account",
title: "Sign out",
text: "Disconnect this device and open the sign in screen.",
icon: "game-icon game-icon-exit-door",
color: "red",
onclick: "logout()"
setting: "litemode",
title: "Use alternate map",
text: "Replace the 3D map with a lightweight power-saving 2D version.",
icon: "game-icon game-icon-treasure-map",
color: "green",
type: "toggle",
restart: true
},
{
setting: "opensource",
@ -20,7 +21,8 @@ var settings = [
text: "See information on third-party code and artwork used in TerranQuest.",
icon: "game-icon game-icon-spell-book",
color: "lightblue",
onclick: "router.navigate('/credits')"
onclick: "router.navigate('/credits')",
type: "link"
},
{
setting: "privacy",
@ -28,7 +30,17 @@ var settings = [
text: "Know what data we collect and what your rights are.",
icon: "game-icon game-icon-spy",
color: "purple",
onclick: "openBrowser('" + SETTINGS["terms_of_service_url"] + "')"
onclick: "openBrowser('" + SETTINGS["terms_of_service_url"] + "')",
type: "link"
},
{
setting: "account",
title: "Sign out",
text: "Disconnect this device and open the sign in screen.",
icon: "game-icon game-icon-exit-door",
color: "red",
onclick: "logout()",
type: "link"
},
{
setting: "versions",
@ -43,14 +55,50 @@ var settings = [
function loadSettings() {
$("#settings-bin").html("");
settings.forEach(function (item) {
$("#settings-bin").append('<div class="col-100 tablet-33 desktop-25 item-col">'
+ '<div class="card padding-half" onclick="' + item.onclick + '">'
+ '<div class="card-content">'
+ '<i class="item-icon ' + item.icon + ' text-color-' + item.color + '"></i><br />'
+ '<h3>' + item.title + '</h3>'
+ item.text
+ '</div>'
+ '</div>'
+ '</div>');
$("#settings-bin").append('<li data-setting="' + item.setting + '">'
+ (item.type == "link" ? '<a href="#" onclick="' + item.onclick + '">' : '')
+ ' <div class="item-content">'
+ ' <div class="item-media" style="justify-content: center;">'
+ ' <i class="' + item.icon + ' fa-2x text-color-' + item.color + '"></i>'
+ ' </div>'
+ ' <div class="item-inner">'
+ ' <div class="item-title">'
+ ' ' + item.title
+ ' <div class="item-footer">'
+ ' ' + item.text
+ ' </div>'
+ ' </div>'
+ ' <div class="item-after">'
+ (item.type == "toggle" ? '<label class="toggle">'
+ ' <input type="checkbox"/>'
+ ' <span class="toggle-icon"></span>'
+ '</label>' : '')
+ ' </div>'
+ ' </div>'
+ ' </div>'
+ (item.type == "link" ? '</a>' : '')
+ '</li>'
);
if (item.type == "toggle") {
var toggle = app.toggle.create({
el: "#settings-bin li[data-setting=" + item.setting + "] .toggle",
on: {
change: function () {
// Don't do anything if the setting isn't actually changed
if ((localStorage.getItem(item.setting) == "true") == this.checked) {
return;
}
localStorage.setItem(item.setting, this.checked);
if (item.restart == true) {
app.dialog.preloader('Applying changes...');
setTimeout(restartApplication, 1000);
}
}
}
});
if ((localStorage.getItem(item.setting) == "true") != toggle.checked) {
toggle.toggle();
}
}
});
}

@ -8,6 +8,8 @@
"framework7": "^4.3.0",
"jdenticon": "^2.1.1",
"jquery": "^3.4.0",
"leaflet": "^1.5.1",
"leaflet.vectorgrid": "^1.3.0",
"mapbox-gl": "^0.54.0"
}
}

@ -11,8 +11,10 @@
</div>
<div class="page-content">
<div class="block">
<div class="row justify-content-center" id="settings-bin">
<div class="row no-gap justify-content-center">
<div class="list no-hairlines tablet-inset col-100 tablet-75 desktop-50">
<ul id="settings-bin">
</ul>
</div>
</div>
</div>

@ -12,6 +12,7 @@ var SETTINGS = {
signup_url: "http://localhost/accounthub/signup/",
terms_of_service_url: "https://netsyms.com/legal?pk_campaign=TerranQuestApp",
map_style_json: "https://maps.netsyms.net/styles/terranquest-3d/style.json",
map_pbf_url: "https://maps.netsyms.net/data/v3/{z}/{x}/{y}.pbf",
stripe_pubkey: "",
teams: {
1: {id: 1, name: "Water", icon: "fas fa-tint", color: "blue", textcolor: "black", hue: 230},

@ -89,6 +89,11 @@ cardinal@~0.4.2:
ansicolors "~0.2.1"
redeyed "~0.4.0"
commander@2:
version "2.20.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
concat-stream@~1.6.0:
version "1.6.2"
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
@ -188,6 +193,21 @@ kdbush@^3.0.0:
resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-3.0.0.tgz#f8484794d47004cc2d85ed3a79353dbe0abc2bf0"
integrity sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==
leaflet.vectorgrid@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/leaflet.vectorgrid/-/leaflet.vectorgrid-1.3.0.tgz#ff2deea17d06a9c6cc5e65d8c7287093950e219a"
integrity sha512-kWmj1pKM+MVdo/7Mg5zsB3YrGZvo/uIuiANV9MvWUFOG+Y2xAJzrteDhoIcCgTjHSSRJ36xdeGdIQVhuWjnCZw==
dependencies:
pbf "^3.0.2"
topojson-client "^2.1.0"
vector-tile "^1.3.0"
whatwg-fetch "^2.0.3"
leaflet@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.5.1.tgz#9afb9d963d66c870066b1342e7a06f92840f46bf"
integrity sha512-ekM9KAeG99tYisNBg0IzEywAlp0hYI5XRipsqRXyRTeuU8jcuntilpp+eFf5gaE0xubc9RuSNIVtByEKwqFV0w==
mapbox-gl@^0.54.0:
version "0.54.0"
resolved "https://registry.yarnpkg.com/mapbox-gl/-/mapbox-gl-0.54.0.tgz#f6cb96ecb8e64276a8ed2fe4a4f213fabab4123e"
@ -243,7 +263,7 @@ path-to-regexp@^3.0.0:
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.0.0.tgz#c981a218f3df543fa28696be2f88e0c58d2e012a"
integrity sha512-ZOtfhPttCrqp2M1PBBH4X13XlvnfhIwD7yCLx+GoGoXRPQyxGOTdQMpIzPSPKXAJT/JQrdfFrgdJOyAzvgpQ9A==
pbf@^3.0.5:
pbf@^3.0.2, pbf@^3.0.5:
version "3.2.0"
resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.2.0.tgz#e76f9f5114e395c25077ad6fe463b3507d6877fc"
integrity sha512-98Eh7rsJNJF/Im6XYMLaOW3cLnNyedlOd6hu3iWMD5I7FZGgpw8yN3vQBrmLbLodu7G784Irb9Qsv2yFrxSAGw==
@ -251,6 +271,11 @@ pbf@^3.0.5:
ieee754 "^1.1.12"
resolve-protobuf-schema "^2.1.0"
point-geometry@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/point-geometry/-/point-geometry-0.0.0.tgz#6fcbcad7a803b6418247dd6e49c2853c584daff7"
integrity sha1-b8vK16gDtkGCR91uScKFPFhNr/c=
potpack@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/potpack/-/potpack-1.0.1.tgz#d1b1afd89e4c8f7762865ec30bd112ab767e2ebf"
@ -358,6 +383,13 @@ tinyqueue@^2.0.0:
resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-2.0.2.tgz#b4fe66d28a5b503edb99c149f87910059782a0cc"
integrity sha512-1oUV+ZAQaeaf830ui/p5JZpzGBw46qs1pKHcfqIc6/QxYDQuEmcBLIhiT0xAxLnekz+qxQusubIYk4cAS8TB2A==
topojson-client@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/topojson-client/-/topojson-client-2.1.0.tgz#ff9f7bf38991185e0b4284c2b06ae834f0eac6c8"
integrity sha1-/59784mRGF4LQoTCsGroNPDqxsg=
dependencies:
commander "2"
typedarray@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
@ -368,6 +400,13 @@ util-deprecate@~1.0.1:
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
vector-tile@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/vector-tile/-/vector-tile-1.3.0.tgz#06d516a83b063f04c82ef539cf1bb1aebeb696b4"
integrity sha1-BtUWqDsGPwTILvU5zxuxrr62lrQ=
dependencies:
point-geometry "0.0.0"
vt-pbf@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/vt-pbf/-/vt-pbf-3.1.1.tgz#b0f627e39a10ce91d943b898ed2363d21899fb82"
@ -381,3 +420,8 @@ wgs84@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/wgs84/-/wgs84-0.0.0.tgz#34fdc555917b6e57cf2a282ed043710c049cdc76"
integrity sha1-NP3FVZF7blfPKigu0ENxDASc3HY=
whatwg-fetch@^2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f"
integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==

Loading…
Cancel
Save