diff --git a/Logic/Osm/OsmConnection.ts b/Logic/Osm/OsmConnection.ts index 369ec3a9b..93164ca2f 100644 --- a/Logic/Osm/OsmConnection.ts +++ b/Logic/Osm/OsmConnection.ts @@ -46,6 +46,7 @@ export class OsmConnection { public auth; public userDetails: UIEventSource; public isLoggedIn: UIEventSource + public loadingStatus = new UIEventSource<"not-attempted" | "loading" | "error" | "logged-in">("not-attempted") public preferencesHandler: OsmPreferences; public readonly _oauth_config: { oauth_consumer_key: string, @@ -141,10 +142,13 @@ export class OsmConnection { this.userDetails.data.name = ""; this.userDetails.ping(); console.log("Logged out") + this.loadingStatus.setData("not-attempted") } public AttemptLogin() { + this.loadingStatus.setData("loading") if (this.fakeUser) { + this.loadingStatus.setData("logged-in") console.log("AttemptLogin called, but ignored as fakeUser is set") return; } @@ -157,6 +161,7 @@ export class OsmConnection { }, function (err, details) { if (err != null) { console.log(err); + self.loadingStatus.setData("error") if (err.status == 401) { console.log("Clearing tokens...") // Not authorized - our token probably got revoked @@ -171,6 +176,7 @@ export class OsmConnection { } if (details == null) { + self.loadingStatus.setData("error") return; } @@ -202,6 +208,7 @@ export class OsmConnection { data.home = {lat: lat, lon: lon}; } + self.loadingStatus.setData("logged-in") const messages = userInfo.getElementsByTagName("messages")[0].getElementsByTagName("received")[0]; data.unreadMessages = parseInt(messages.getAttribute("unread")); data.totalMessages = parseInt(messages.getAttribute("count")); @@ -305,7 +312,7 @@ export class OsmConnection { }) } - + public addCommentToNode(id: number | string, text: string): Promise { if (this._dryRun.data) { console.warn("Dryrun enabled - not actually adding comment ", text, "to note ", id) diff --git a/UI/BigComponents/UserBadge.ts b/UI/BigComponents/UserBadge.ts index 86bfd0a8f..82adbe12e 100644 --- a/UI/BigComponents/UserBadge.ts +++ b/UI/BigComponents/UserBadge.ts @@ -8,20 +8,12 @@ import Link from "../Base/Link"; import Toggle from "../Input/Toggle"; import Img from "../Base/Img"; import MapState from "../../Logic/State/MapState"; +import {LoginToggle} from "../Popup/LoginButton"; -export default class UserBadge extends Toggle { +export default class UserBadge extends LoginToggle { constructor(state: MapState) { - - const userDetails = state.osmConnection.userDetails; - - const loginButton = Translations.t.general.loginWithOpenStreetMap - .Clone() - .SetClass("userbadge-login inline-flex justify-center items-center w-full h-full text-lg font-bold min-w-[20em]") - .onClick(() => state.osmConnection.AttemptLogin()); - - const logout = Svg.logout_svg() .onClick(() => { @@ -126,16 +118,14 @@ export default class UserBadge extends Toggle { } })); - userBadge.SetClass("inline-block m-0 w-full").SetStyle("pointer-events: all") + super( - userBadge, - loginButton, - state.osmConnection.isLoggedIn + new Combine([userBadge.SetClass("inline-block m-0 w-full").SetStyle("pointer-events: all")]) + .SetClass("shadow rounded-full h-min overflow-hidden block w-full md:w-max"), + Translations.t.general.loginWithOpenStreetMap, + state ) - - this.SetClass("shadow rounded-full h-min overflow-hidden block w-full md:w-max") - } diff --git a/UI/ImportFlow/ImportViewerGui.ts b/UI/ImportFlow/ImportViewerGui.ts index 7da6603d6..f0af1f059 100644 --- a/UI/ImportFlow/ImportViewerGui.ts +++ b/UI/ImportFlow/ImportViewerGui.ts @@ -18,8 +18,7 @@ import Table from "../Base/Table"; import LeftIndex from "../Base/LeftIndex"; import Toggleable, {Accordeon} from "../Base/Toggleable"; import TableOfContents from "../Base/TableOfContents"; -import LoginButton from "../Popup/LoginButton"; -import BackToIndex from "../BigComponents/BackToIndex"; +import {LoginToggle} from "../Popup/LoginButton"; import {QueryParameters} from "../../Logic/Web/QueryParameters"; interface NoteProperties { @@ -89,7 +88,7 @@ class MassAction extends Combine { }, shown:"On every open note, read the 'note='-tag and and this note as comment. (This action ignores the textfield)" },//*/ - + ]) const handledNotesCounter = new UIEventSource(undefined) @@ -127,7 +126,7 @@ class MassAction extends Combine { handledNotesCounter.map(s => s === undefined) ) - , new VariableUiElement(textField.GetValue().map(txt => "Type a text of at least 15 characters to apply the action. Currently, there are "+(txt?.length ?? 0)+" characters")).SetClass("alert"), + , new VariableUiElement(textField.GetValue().map(txt => "Type a text of at least 15 characters to apply the action. Currently, there are " + (txt?.length ?? 0) + " characters")).SetClass("alert"), actions.GetValue().map(v => v !== undefined && textField.GetValue()?.data?.length > 15, [textField.GetValue()]) ), new Toggle( @@ -212,7 +211,7 @@ class ImportInspector extends VariableUiElement { constructor(userDetails: { uid: number } | { display_name: string, search?: string }, state: UserRelatedState) { let url; - + if (userDetails["uid"] !== undefined) { url = "https://api.openstreetmap.org/api/0.6/notes/search.json?user=" + userDetails["uid"] + "&closed=730&limit=10000&sort=created_at&q=%23import" } else { @@ -303,28 +302,23 @@ class ImportInspector extends VariableUiElement { } } -class ImportViewerGui extends Combine { +class ImportViewerGui extends LoginToggle { constructor() { const state = new UserRelatedState(undefined) const displayNameParam = QueryParameters.GetQueryParameter("user", "", "The username of the person whom you want to see the notes for"); const searchParam = QueryParameters.GetQueryParameter("search", "", "A text that should be included in the first comment of the note to be shown") - super([ + super( new VariableUiElement(state.osmConnection.userDetails.map(ud => { const display_name = displayNameParam.data; const search = searchParam.data; if (display_name !== "" && search !== "") { return new ImportInspector({display_name, search}, undefined); } - - if (ud === undefined || ud.loggedIn === false) { - return new Combine([new LoginButton("Login to inspect your import flows", state), - new BackToIndex() - ]) - } return new ImportInspector(ud, state); - }, [displayNameParam, searchParam])) - ]); + }, [displayNameParam, searchParam])), + "Login to inspect your import flows", state + ) } } diff --git a/UI/Popup/LoginButton.ts b/UI/Popup/LoginButton.ts index 3ff24118a..dd16d6411 100644 --- a/UI/Popup/LoginButton.ts +++ b/UI/Popup/LoginButton.ts @@ -3,13 +3,16 @@ import BaseUIElement from "../BaseUIElement"; import Svg from "../../Svg"; import {OsmConnection} from "../../Logic/Osm/OsmConnection"; import Toggle from "../Input/Toggle"; +import {VariableUiElement} from "../Base/VariableUIElement"; +import Loading from "../Base/Loading"; +import Translations from "../i18n/Translations"; -export default class LoginButton extends SubtleButton { +class LoginButton extends SubtleButton { constructor(text: BaseUIElement | string, state: { osmConnection: OsmConnection - }) { - super(Svg.osm_logo_ui(), text); + }, icon?: BaseUIElement | string) { + super(icon ?? Svg.osm_logo_ui(), text); this.onClick(() => { state.osmConnection.AttemptLogin() }) @@ -17,10 +20,28 @@ export default class LoginButton extends SubtleButton { } -export class LoginToggle extends Toggle { +export class LoginToggle extends VariableUiElement { constructor(el, text: BaseUIElement | string, state: { osmConnection: OsmConnection }) { - super(el, new LoginButton(text, state), state.osmConnection.isLoggedIn) + const loading = new Loading("Trying to log in...") + const login = new LoginButton(text, state) + super( + state.osmConnection.loadingStatus.map(osmConnectionState => { + console.trace("Current osm state is ", osmConnectionState) + if(osmConnectionState === "loading"){ + return loading + } + if(osmConnectionState === "not-attempted"){ + return login + } + if(osmConnectionState === "logged-in"){ + return el + } + + // Error! + return new LoginButton(Translations.t.general.loginFailed, state, Svg.invalid_svg()) + }) + ) } } \ No newline at end of file diff --git a/assets/layers/gps_track/gps_track.json b/assets/layers/gps_track/gps_track.json index 596c6ca80..60e160ade 100644 --- a/assets/layers/gps_track/gps_track.json +++ b/assets/layers/gps_track/gps_track.json @@ -19,6 +19,7 @@ } }, "export_as_gpx", + "export_as_geojson", "minimap", { "id": "delete", diff --git a/langs/en.json b/langs/en.json index d9a239e90..00c8e36b0 100644 --- a/langs/en.json +++ b/langs/en.json @@ -85,6 +85,7 @@ "loginWithOpenStreetMap": "Login with OpenStreetMap", "welcomeBack": "You are logged in, welcome back!", "loginToStart": "Log in to answer this question", + "loginFailed": "Logging in into OpenStreetMap failed", "openStreetMapIntro": "

An Open Map

One that everyone can use and edit freely. A single place to store all geo-info. Different, small, incompatible and outdated maps are not needed anywhere.

OpenStreetMap is not the enemy map. The map data can be used freely (with attribution and publication of changes to that data). Everyone can add new data and fix errors. This website uses OpenStreetMap. All the data is from there, and your answers and corrections are used all over.

Many people and apps already use OpenStreetMap: Organic Maps, OsmAnd, but also the maps at Facebook, Instagram, Apple-maps and Bing-maps are (partly) powered by OpenStreetMap.

", "search": { "search": "Search a location", diff --git a/package-lock.json b/package-lock.json index eb7f6a2e6..29e5b3df3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,6 @@ "@types/jquery": "^3.5.5", "@types/leaflet-markercluster": "^1.0.3", "@types/leaflet-providers": "^1.2.0", - "@types/leaflet.markercluster": "^1.4.3", "@types/lz-string": "^1.3.34", "@types/papaparse": "^5.3.1", "@types/prompt-sync": "^4.1.0", @@ -36,13 +35,11 @@ "leaflet-polylineoffset": "^1.1.1", "leaflet-providers": "^1.13.0", "leaflet-simple-map-screenshoter": "^0.4.4", - "leaflet.markercluster": "^1.4.1", "libphonenumber": "^0.0.9", "libphonenumber-js": "^1.7.55", "lz-string": "^1.4.4", "mangrove-reviews": "^0.1.3", "moment": "^2.29.0", - "npm-run-all": "^4.1.5", "opening_hours": "^3.6.0", "osm-auth": "^1.0.2", "osmtogeojson": "^3.0.0-beta.4", @@ -63,7 +60,6 @@ "assert": "^2.0.0", "dependency-cruiser": "^10.4.0", "fs": "0.0.1-security", - "git-json-merge": "^0.4.5", "read-file": "^0.2.0", "sharp": "^0.28.3", "ts-node": "^9.0.0", @@ -3241,14 +3237,6 @@ "@types/leaflet": "*" } }, - "node_modules/@types/leaflet.markercluster": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/@types/leaflet.markercluster/-/leaflet.markercluster-1.4.4.tgz", - "integrity": "sha512-BQAilNWlBpYl4+PrsJXLOh4vyv7KfWi5kh3Fclg5y4gEeNeXKqhS6y1zzBB4+wcTuVUnMWfm2G0MfqA4yA5A5A==", - "dependencies": { - "@types/leaflet": "*" - } - }, "node_modules/@types/lz-string": { "version": "1.3.34", "resolved": "https://registry.npmjs.org/@types/lz-string/-/lz-string-1.3.34.tgz", @@ -3423,12 +3411,6 @@ "node": ">=0.4.0" } }, - "node_modules/adiff": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/adiff/-/adiff-0.2.13.tgz", - "integrity": "sha1-3D3TL5RNl/J366WM5SmXrf8fdyg=", - "dev": true - }, "node_modules/affine-hull": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/affine-hull/-/affine-hull-1.0.0.tgz", @@ -5900,15 +5882,6 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", @@ -7066,22 +7039,6 @@ "assert-plus": "^1.0.0" } }, - "node_modules/git-json-merge": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/git-json-merge/-/git-json-merge-0.4.5.tgz", - "integrity": "sha512-akVUhyzRtkXGe5uAcw3AijF/253RA7tAPdfHtKLawYAhDjuyP+Ebr1YvZUv+7Jyr41g+IVRpKPBd2h+m6AHNqQ==", - "dev": true, - "dependencies": { - "detect-indent": "^6.0.0", - "xdiff": "^0.2.11" - }, - "bin": { - "git-json-merge": "bin/git-json-merge" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -7376,7 +7333,8 @@ "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true }, "node_modules/hsl-regex": { "version": "1.0.0", @@ -8909,14 +8867,6 @@ "file-saver": "^2.0.2" } }, - "node_modules/leaflet.markercluster": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.0.tgz", - "integrity": "sha512-Fvf/cq4o806mJL50n+fZW9+QALDDLPvt7vuAjlD2vfnxx3srMDs2vWINJze4nKYJYRY45OC6tM/669C3pLwMCA==", - "peerDependencies": { - "leaflet": "^1.3.1" - } - }, "node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -9155,14 +9105,6 @@ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "engines": { - "node": ">= 0.10.0" - } - }, "node_modules/meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", @@ -9569,6 +9511,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -9580,6 +9523,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, "bin": { "semver": "bin/semver" } @@ -9609,84 +9553,6 @@ "node": ">=6" } }, - "node_modules/npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "bin": { - "npm-run-all": "bin/npm-run-all/index.js", - "run-p": "bin/run-p/index.js", - "run-s": "bin/run-s/index.js" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/npm-run-all/node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "engines": { - "node": ">=4" - } - }, "node_modules/npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -10530,17 +10396,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -13076,11 +12931,6 @@ "node": ">=0.10.0" } }, - "node_modules/shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, "node_modules/shelljs": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz", @@ -13343,6 +13193,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -13351,12 +13202,14 @@ "node_modules/spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -13365,7 +13218,8 @@ "node_modules/spdx-license-ids": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true }, "node_modules/splaytree": { "version": "3.1.0", @@ -13649,22 +13503,6 @@ "node": ">=0.10.0" } }, - "node_modules/string.prototype.padend": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", - "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", @@ -15809,6 +15647,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -16113,18 +15952,6 @@ "async-limiter": "~1.0.0" } }, - "node_modules/xdiff": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/xdiff/-/xdiff-0.2.11.tgz", - "integrity": "sha1-cj1SPhtvJlojPK/HeGBiLqXS2Mg=", - "dev": true, - "dependencies": { - "adiff": "~0.2.4" - }, - "engines": { - "node": "*" - } - }, "node_modules/xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", @@ -18839,14 +18666,6 @@ "@types/leaflet": "*" } }, - "@types/leaflet.markercluster": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/@types/leaflet.markercluster/-/leaflet.markercluster-1.4.4.tgz", - "integrity": "sha512-BQAilNWlBpYl4+PrsJXLOh4vyv7KfWi5kh3Fclg5y4gEeNeXKqhS6y1zzBB4+wcTuVUnMWfm2G0MfqA4yA5A5A==", - "requires": { - "@types/leaflet": "*" - } - }, "@types/lz-string": { "version": "1.3.34", "resolved": "https://registry.npmjs.org/@types/lz-string/-/lz-string-1.3.34.tgz", @@ -18995,12 +18814,6 @@ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" }, - "adiff": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/adiff/-/adiff-0.2.13.tgz", - "integrity": "sha1-3D3TL5RNl/J366WM5SmXrf8fdyg=", - "dev": true - }, "affine-hull": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/affine-hull/-/affine-hull-1.0.0.tgz", @@ -20970,12 +20783,6 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true - }, "detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", @@ -21906,16 +21713,6 @@ "assert-plus": "^1.0.0" } }, - "git-json-merge": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/git-json-merge/-/git-json-merge-0.4.5.tgz", - "integrity": "sha512-akVUhyzRtkXGe5uAcw3AijF/253RA7tAPdfHtKLawYAhDjuyP+Ebr1YvZUv+7Jyr41g+IVRpKPBd2h+m6AHNqQ==", - "dev": true, - "requires": { - "detect-indent": "^6.0.0", - "xdiff": "^0.2.11" - } - }, "github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -22148,7 +21945,8 @@ "hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true }, "hsl-regex": { "version": "1.0.0", @@ -23304,12 +23102,6 @@ "file-saver": "^2.0.2" } }, - "leaflet.markercluster": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.0.tgz", - "integrity": "sha512-Fvf/cq4o806mJL50n+fZW9+QALDDLPvt7vuAjlD2vfnxx3srMDs2vWINJze4nKYJYRY45OC6tM/669C3pLwMCA==", - "requires": {} - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -23517,11 +23309,6 @@ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=" - }, "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", @@ -23862,6 +23649,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -23872,7 +23660,8 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, @@ -23892,63 +23681,6 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" }, - "npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "requires": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "dependencies": { - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - } - } - }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -24624,11 +24356,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" }, - "pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==" - }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -26568,11 +26295,6 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, "shelljs": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz", @@ -26784,6 +26506,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -26792,12 +26515,14 @@ "spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true }, "spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -26806,7 +26531,8 @@ "spdx-license-ids": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true }, "splaytree": { "version": "3.1.0", @@ -27031,16 +26757,6 @@ } } }, - "string.prototype.padend": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", - "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - } - }, "string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", @@ -28737,6 +28453,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -28985,15 +28702,6 @@ "async-limiter": "~1.0.0" } }, - "xdiff": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/xdiff/-/xdiff-0.2.11.tgz", - "integrity": "sha1-cj1SPhtvJlojPK/HeGBiLqXS2Mg=", - "dev": true, - "requires": { - "adiff": "~0.2.4" - } - }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",