diff --git a/css/style.css b/css/style.css index 213d6b3f..99cc7b36 100644 --- a/css/style.css +++ b/css/style.css @@ -749,3 +749,15 @@ table.dataTable.display tbody tr:hover.selected { so we ignore pointer events in this situation to avoid that*/ pointer-events: none; } + +/* + * Heightgraph customizations; + * since the legend and the gradient types are in the way, hide them; + * since there's only the gradient layer, hide the layer selector. + */ +.legend-hover { + display: none; +} +#selectionText { + display: none; +} diff --git a/js/index.js b/js/index.js index 18aa65f7..f89dd3d8 100644 --- a/js/index.js +++ b/js/index.js @@ -214,7 +214,8 @@ } else { stats = new BR.TrackStats(); } - elevation = new BR.Elevation(); + + elevation = new BR.Heightgraph(); profile = new BR.Profile(); profile.on('update', function (evt) { @@ -460,12 +461,6 @@ }, urlHash ); - - // listener and initCollapse here and not in onAdd, as addBelow calls addTo (-> onAdd) on resize - $(window).resize(function () { - elevation.addBelow(map); - }); - elevation.initCollapse(map); } i18next.on('languageChanged', function (detectedLanguage) { diff --git a/js/plugin/Elevation.js b/js/plugin/Elevation.js deleted file mode 100644 index b8dadb66..00000000 --- a/js/plugin/Elevation.js +++ /dev/null @@ -1,113 +0,0 @@ -BR.Elevation = L.Control.Elevation.extend({ - options: { - width: $('#map').outerWidth(), - margins: { - top: 20, - right: 30, - bottom: 30, - left: 60, - }, - theme: 'steelblue-theme', - shortcut: { - toggle: 69, // char code for 'e' - }, - }, - - onAdd: function (map) { - var container = L.Control.Elevation.prototype.onAdd.call(this, map); - - // revert registering touch events when touch screen detection is available and negative - // see https://github.com/MrMufflon/Leaflet.Elevation/issues/67 - if (L.Browser.touch && BR.Browser.touchScreenDetectable && !BR.Browser.touchScreen) { - this._background.on('touchmove.drag', null).on('touchstart.drag', null).on('touchstart.focus', null); - L.DomEvent.off(this._container, 'touchend', this._dragEndHandler, this); - - this._background - .on('mousemove.focus', this._mousemoveHandler.bind(this)) - .on('mouseout.focus', this._mouseoutHandler.bind(this)) - .on('mousedown.drag', this._dragStartHandler.bind(this)) - .on('mousemove.drag', this._dragHandler.bind(this)); - L.DomEvent.on(this._container, 'mouseup', this._dragEndHandler, this); - } - - L.DomEvent.addListener(document, 'keydown', this._keydownListener, this); - - return container; - }, - - addBelow: function (map) { - // waiting for https://github.com/MrMufflon/Leaflet.Elevation/pull/66 - // this.width($('#map').outerWidth()); - this.options.width = $('#content').outerWidth(); - - if (this.getContainer() != null) { - this.remove(map); - } - - function setParent(el, newParent) { - newParent.appendChild(el); - } - this.addTo(map); - // move elevation graph outside of the map - setParent(this.getContainer(), document.getElementById('elevation-chart')); - }, - - initCollapse: function (map) { - var self = this; - var onHide = function () { - $('#elevation-btn').removeClass('active'); - // we must fetch tiles that are located behind elevation-chart - map._onResize(); - - if (this.id && BR.Util.localStorageAvailable() && !self.shouldRestoreChart) { - localStorage.removeItem(this.id); - } - }; - var onShow = function () { - $('#elevation-btn').addClass('active'); - - if (this.id && BR.Util.localStorageAvailable()) { - localStorage[this.id] = 'true'; - } - }; - // on page load, we want to restore collapse state from previous usage - $('#elevation-chart') - .on('hidden.bs.collapse', onHide) - .on('shown.bs.collapse', onShow) - .each(function () { - if (this.id && BR.Util.localStorageAvailable() && localStorage[this.id] === 'true') { - self.shouldRestoreChart = true; - } - }); - }, - - update: function (track, layer) { - this.clear(); - - // bring height indicator to front, because of track casing in BR.Routing - if (this._mouseHeightFocus) { - var g = this._mouseHeightFocus[0][0].parentNode; - g.parentNode.appendChild(g); - } - - if (track && track.getLatLngs().length > 0) { - if (this.shouldRestoreChart === true) $('#elevation-chart').collapse('show'); - this.shouldRestoreChart = undefined; - - this.addData(track.toGeoJSON(), layer); - - layer.on('mouseout', this._hidePositionMarker.bind(this)); - } else { - if ($('#elevation-chart').hasClass('show')) { - this.shouldRestoreChart = true; - } - $('#elevation-chart').collapse('hide'); - } - }, - - _keydownListener: function (e) { - if (BR.Util.keyboardShortcutsAllowed(e) && e.keyCode === this.options.shortcut.toggle) { - $('#elevation-btn').click(); - } - }, -}); diff --git a/js/plugin/Heightgraph.js b/js/plugin/Heightgraph.js new file mode 100644 index 00000000..f0ebb3e4 --- /dev/null +++ b/js/plugin/Heightgraph.js @@ -0,0 +1,194 @@ +BR.Heightgraph = function (map, layersControl, routing, pois) { + Heightgraph = L.Control.Heightgraph.extend({ + options: { + width: $('#map').outerWidth(), + margins: { + top: 15, + right: 30, + bottom: 30, + left: 70, + }, + expandControls: false, + mappings: { + gradient: { + '-5': { + text: '- 16%+', + color: '#028306', + }, + '-4': { + text: '- 10-15%', + color: '#2AA12E', + }, + '-3': { + text: '- 7-9%', + color: '#53BF56', + }, + '-2': { + text: '- 4-6%', + color: '#7BDD7E', + }, + '-1': { + text: '- 1-3%', + color: '#A4FBA6', + }, + 0: { + text: '0%', + color: '#ffcc99', + }, + 1: { + text: '1-3%', + color: '#F29898', + }, + 2: { + text: '4-6%', + color: '#E07575', + }, + 3: { + text: '7-9%', + color: '#CF5352', + }, + 4: { + text: '10-15%', + color: '#BE312F', + }, + 5: { + text: '16%+', + color: '#AD0F0C', + }, + }, + }, + // extra options + shortcut: { + toggle: 69, // char code for 'e' + }, + }, + + addBelow: function (map) { + // waiting for https://github.com/MrMufflon/Leaflet.Elevation/pull/66 + // this.width($('#map').outerWidth()); + this.options.width = $('#content').outerWidth(); + + if (this.getContainer() != null) { + this.remove(map); + } + + function setParent(el, newParent) { + newParent.appendChild(el); + } + this.addTo(map); + + // move elevation graph outside of the map + setParent(this.getContainer(), document.getElementById('elevation-chart')); + + // bind the mouse move and mouse out handlers, I'll reuse them later on + this._mouseMoveHandlerBound = this.mapMousemoveHandler.bind(this); + this._mouseoutHandlerBound = this._mouseoutHandler.bind(this); + + L.DomEvent.addListener(document, 'keydown', this._keydownListener, this); + this.initCollapse(map); + + var self = this; + var container = $('#elevation-chart'); + $(window).resize(function () { + // avoid useless computations if the chart is not visible + if (container.is(':visible')) { + self.resize({ + width: container.width(), + height: container.height(), + }); + } + }); + // Trigger the chart resize after the toggle animation is complete, + // in case the window was resized while the chart was not visible. + // The resize must be called after the animation (i.e. 'shown.bs.collapse') + // and cannot be called before the animation (i.e. 'show.bs.collapse'), + // for the container has the old width pre animation and new width post animation. + container.on('shown.bs.collapse', function () { + self.resize({ + width: container.width(), + height: container.height(), + }); + }); + + // and render the chart + this.update(); + }, + + initCollapse: function (map) { + var self = this; + var onHide = function () { + $('#elevation-btn').removeClass('active'); + // we must fetch tiles that are located behind elevation-chart + map._onResize(); + + if (this.id && BR.Util.localStorageAvailable() && !self.shouldRestoreChart) { + localStorage.removeItem(this.id); + } + }; + var onShow = function () { + $('#elevation-btn').addClass('active'); + + if (this.id && BR.Util.localStorageAvailable()) { + localStorage[this.id] = 'true'; + } + }; + // on page load, we want to restore collapse state from previous usage + $('#elevation-chart') + .on('hidden.bs.collapse', onHide) + .on('shown.bs.collapse', onShow) + .each(function () { + if (this.id && BR.Util.localStorageAvailable() && localStorage[this.id] === 'true') { + self.shouldRestoreChart = true; + } + }); + }, + + _keydownListener: function (e) { + if (BR.Util.keyboardShortcutsAllowed(e) && e.keyCode === this.options.shortcut.toggle) { + $('#elevation-btn').click(); + } + }, + + update: function (track, layer) { + // bring height indicator to front, because of track casing in BR.Routing + if (this._mouseHeightFocus) { + var g = this._mouseHeightFocus._groups[0][0].parentNode; + g.parentNode.appendChild(g); + } + + if (track && track.getLatLngs().length > 0) { + var geojsonFeatures = geoDataExchange.buildGeojsonFeatures(track.getLatLngs()); + this.addData(geojsonFeatures); + + // re-add handlers + if (layer) { + layer.on('mousemove', this._mouseMoveHandlerBound); + layer.on('mouseout', this._mouseoutHandlerBound); + } + + if (this.shouldRestoreChart === true) $('#elevation-chart').collapse('show'); + this.shouldRestoreChart = undefined; + } else { + this._removeMarkedSegmentsOnMap(); + this._resetDrag(); + + // clear chart by passing an empty dataset + this.addData([]); + + // and remove handlers + if (layer) { + layer.off('mousemove', this._mouseMoveHandlerBound); + layer.off('mouseout', this._mouseoutHandlerBound); + } + + if ($('#elevation-chart').hasClass('show')) { + this.shouldRestoreChart = true; + } + $('#elevation-chart').collapse('hide'); + } + }, + }); + + var heightgraphControl = new Heightgraph(); + return heightgraphControl; +}; diff --git a/package.json b/package.json index f982f066..d372fe5d 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "lint": "eslint .", "prettier": "prettier --write '**/*'", "serve": "gulp serve watch", - "standalone": "mvn clean install -f ../brouter -pl '!brouter-routing-app' -Dmaven.javadoc.skip=true && ../brouter/misc/scripts/generate_profile_variants.sh && gulp release:zip_standalone" + "standalone": "mvn clean install -f ../brouter -pl '!brouter-routing-app' -Dmaven.javadoc.skip=true && ../brouter/misc/scripts/generate_profile_variants.sh && gulp release:zip_standalone", + "postinstall": "patch-package" }, "husky": { "hooks": { @@ -46,9 +47,9 @@ "bootstrap-select": "1.13.6", "bootstrap-slider": "^9.8.1", "codemirror": "^5.35.0", - "d3": "~3.5.5", "datatables": "~1.10.18", "font-awesome": "^4.7.0", + "geo-data-exchange": "alexcojocaru/geo-data-exchange#v1.1.0", "i18next": "^19.8.4", "i18next-browser-languagedetector": "^6.0.1", "i18next-xhr-backend": "^3.2.2", @@ -59,7 +60,6 @@ "leaflet-control-geocoder": "^1.13.0", "leaflet-easybutton": "*", "leaflet-editable": "^1.1.0", - "leaflet-elevation": "nrenner/Leaflet.Elevation#dev", "leaflet-filelayer": "^1.2.0", "leaflet-geometryutil": "^0.9.1", "leaflet-hotline": "^0.4.0", @@ -68,6 +68,7 @@ "leaflet-routing": "nrenner/leaflet-routing#e94e153", "leaflet-sidebar-v2": "nrenner/leaflet-sidebar-v2#dev", "leaflet-triangle-marker": "^1.0.2", + "leaflet.heightgraph": "1.3.3", "leaflet.locatecontrol": "^0.60.0", "leaflet.snogylop": "^0.4.0", "leaflet.stravasegments": "2.3.2", @@ -108,6 +109,8 @@ "merge-stream": "^2.0.0", "node-fetch": "^2.6.1", "npmfiles": "^0.1.3", + "patch-package": "~6.2.2", + "postinstall-postinstall": "~2.1.0", "prettier": "^2.2.1", "pretty-quick": "^3.1.0" }, @@ -172,13 +175,12 @@ "dist/css/bootstrap.css" ] }, - "leaflet-elevation": { + "leaflet.heightgraph": { "main": [ - "src/L.Control.Elevation.js", - "dist/leaflet.elevation-0.0.4.css", - "dist/images/*.png" - ], - "dependencies": null + "dist/L.Control.Heightgraph.js", + "src/L.Control.Heightgraph.css", + "dist/img/*.svg" + ] }, "leaflet-control-geocoder": { "main": [ diff --git a/patches/leaflet.heightgraph+1.3.3.patch b/patches/leaflet.heightgraph+1.3.3.patch new file mode 100644 index 00000000..b4ec4adb --- /dev/null +++ b/patches/leaflet.heightgraph+1.3.3.patch @@ -0,0 +1,14 @@ +diff --git a/node_modules/leaflet.heightgraph/dist/L.Control.Heightgraph.js b/node_modules/leaflet.heightgraph/dist/L.Control.Heightgraph.js +index 122c9ac..1048691 100644 +--- a/node_modules/leaflet.heightgraph/dist/L.Control.Heightgraph.js ++++ b/node_modules/leaflet.heightgraph/dist/L.Control.Heightgraph.js +@@ -1,3 +1,4 @@ ++(function() { + 'use strict'; + + function _typeof(obj) { +@@ -5792,3 +5793,4 @@ var schemeSet3 = colors("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9b + + return L.Control.Heightgraph; + }, window); ++}()); diff --git a/yarn.lock b/yarn.lock index 4feb6802..118aa795 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1268,6 +1268,11 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + JSV@^4.0.x: version "4.0.2" resolved "https://registry.yarnpkg.com/JSV/-/JSV-4.0.2.tgz#d077f6825571f82132f9dffaed587b4029feff57" @@ -2575,6 +2580,17 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + cross-spawn@^7.0.0, cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -2627,11 +2643,6 @@ d3-voronoi@1.1.2: resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.2.tgz#1687667e8f13a2d158c80c1480c5a29cb0d8973c" integrity sha1-Fodmfo8TotFYyAwUgMWinLDYlzw= -d3@~3.5.5: - version "3.5.17" - resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8" - integrity sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g= - d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" @@ -3497,6 +3508,14 @@ find-versions@^3.2.0: dependencies: semver-regex "^2.0.0" +find-yarn-workspace-root@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db" + integrity sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q== + dependencies: + fs-extra "^4.0.3" + micromatch "^3.1.4" + findup-sync@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" @@ -3630,6 +3649,24 @@ fs-extra@3.0.1: jsonfile "^3.0.0" universalify "^0.1.0" +fs-extra@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" @@ -3687,6 +3724,12 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" +geo-data-exchange@alexcojocaru/geo-data-exchange#v1.1.0: + version "1.1.0" + resolved "https://codeload.github.com/alexcojocaru/geo-data-exchange/tar.gz/502d3c0180462be022dab7d470ac737f972c312b" + dependencies: + leaflet "^1.5.0" + geojson-equality@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/geojson-equality/-/geojson-equality-0.1.6.tgz#a171374ef043e5d4797995840bae4648e0752d72" @@ -4621,6 +4664,13 @@ is-buffer@^2.0.2: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -4963,6 +5013,13 @@ jsonfile@^3.0.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + jsonlint@^1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/jsonlint/-/jsonlint-1.6.3.tgz#cb5e31efc0b78291d0d862fbef05900adf212988" @@ -5022,6 +5079,13 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== +klaw-sync@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" + integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== + dependencies: + graceful-fs "^4.1.11" + last-run@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/last-run/-/last-run-1.1.1.tgz#45b96942c17b1c79c772198259ba943bebf8ca5b" @@ -5070,10 +5134,6 @@ leaflet-editable@^1.1.0: resolved "https://registry.yarnpkg.com/leaflet-editable/-/leaflet-editable-1.2.0.tgz#a3a01001764ba58ea923381ee6a1c814708a0b84" integrity sha512-wG11JwpL8zqIbypTop6xCRGagMuWw68ihYu4uqrqc5Ep0wnEJeyob7NB2Rt5t74Oih4rwJ3OfwaGbzdowOGfYQ== -leaflet-elevation@nrenner/Leaflet.Elevation#dev: - version "0.0.4" - resolved "https://codeload.github.com/nrenner/Leaflet.Elevation/tar.gz/9ae6a3caef5f01abb3e55e05376df2e0046f7449" - leaflet-filelayer@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/leaflet-filelayer/-/leaflet-filelayer-1.2.0.tgz#9f822e68a06072b0b0a8f328ba9419ba96bbccb1" @@ -5119,6 +5179,13 @@ leaflet-triangle-marker@^1.0.2: resolved "https://registry.yarnpkg.com/leaflet-triangle-marker/-/leaflet-triangle-marker-1.0.2.tgz#e4c5f1d09d10ae078f8fba87aa32e5884017ad96" integrity sha512-J2Xa5UgUV6rU04bcwAdQRptnLm7nSxDtxqfX0Nzb+tz6p3buyEEBkXdOvEgzD6ghuII6BVSXFb4QP8cyVKigXg== +leaflet.heightgraph@1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/leaflet.heightgraph/-/leaflet.heightgraph-1.3.3.tgz#14b8bac70ac16863991c16f5d6b772aad8034fbd" + integrity sha512-jr6xDmiTBvIIu1WLI0q0rt9E30H1VVTxncHAaojcpsZeDvYyBZyBsgoeEi8ouJVP9OolCfNQTCyPbNR73tKgqg== + dependencies: + leaflet "^1.6.0" + leaflet.locatecontrol@^0.60.0: version "0.60.0" resolved "https://registry.yarnpkg.com/leaflet.locatecontrol/-/leaflet.locatecontrol-0.60.0.tgz#fc7be657ca9b7e8b8ba7263e52b0bb902b7cd965" @@ -5150,6 +5217,11 @@ leaflet@^1.0.1, leaflet@^1.3.4: resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.4.0.tgz#d5f56eeb2aa32787c24011e8be4c77e362ae171b" integrity sha512-x9j9tGY1+PDLN9pcWTx9/y6C5nezoTMB8BLK5jTakx+H7bPlnbCHfi9Hjg+Qt36sgDz/cb9lrSpNQXmk45Tvhw== +leaflet@^1.5.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.7.1.tgz#10d684916edfe1bf41d688a3b97127c0322a2a19" + integrity sha512-/xwPEBidtg69Q3HlqPdU3DnrXQOvQU/CCHA1tcDQVzOwm91YMYaILjNp7L4Eaw5Z4sOYdbBz6koWyibppd8Zqw== + leaflet@^1.6.0, leaflet@~1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.6.0.tgz#aecbb044b949ec29469eeb31c77a88e2f448f308" @@ -5725,6 +5797,11 @@ next-tick@^1.0.0, next-tick@~1.0.0: resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + node-fetch@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" @@ -6019,7 +6096,7 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" -os-tmpdir@^1.0.0: +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= @@ -6145,6 +6222,24 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= +patch-package@~6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.2.2.tgz#71d170d650c65c26556f0d0fbbb48d92b6cc5f39" + integrity sha512-YqScVYkVcClUY0v8fF0kWOjDYopzIM8e3bj/RU1DPeEF14+dCGm6UeOYm4jvCyxqIEQ5/eJzmbWfDWnUleFNMg== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^2.4.2" + cross-spawn "^6.0.5" + find-yarn-workspace-root "^1.2.1" + fs-extra "^7.0.1" + is-ci "^2.0.0" + klaw-sync "^6.0.0" + minimist "^1.2.0" + rimraf "^2.6.3" + semver "^5.6.0" + slash "^2.0.0" + tmp "^0.0.33" + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -6177,6 +6272,11 @@ path-is-inside@^1.0.1: resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" @@ -6367,6 +6467,11 @@ postcss@^7.0.16: source-map "^0.6.1" supports-color "^6.1.0" +postinstall-postinstall@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3" + integrity sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -6904,7 +7009,7 @@ rimraf@^2.2.8: dependencies: glob "^7.1.3" -rimraf@^2.6.1: +rimraf@^2.6.1, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -7007,7 +7112,7 @@ semver-regex@^2.0.0: resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw== -"semver@2 || 3 || 4 || 5", semver@^5.3.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -7120,6 +7225,13 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -7127,6 +7239,11 @@ shebang-command@^2.0.0: dependencies: shebang-regex "^3.0.0" +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" @@ -7147,6 +7264,11 @@ skmeans@0.9.7: resolved "https://registry.yarnpkg.com/skmeans/-/skmeans-0.9.7.tgz#72670cebb728508f56e29c0e10d11e623529ce5d" integrity sha512-hNj1/oZ7ygsfmPZ7ZfN5MUBRoGg1gtpnImuJBgLO0ljQ67DtJuiQaiYdS4lUA6s0KCwnPhGivtC/WRwIZLkHyg== +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -7783,6 +7905,13 @@ tinyqueue@^1.1.0: resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-1.2.3.tgz#b6a61de23060584da29f82362e45df1ec7353f3d" integrity sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA== +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + to-absolute-glob@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" @@ -8170,7 +8299,7 @@ which-pm-runs@^1.0.0: resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= -which@^1.2.14: +which@^1.2.14, which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==