From a3c249474da40eb46750e0133debd7ff626f2463 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 21 Sep 2023 02:31:35 +0200 Subject: [PATCH] Refactoring: use special rendering for mangrove key download in usersettings --- assets/layers/usersettings/usersettings.json | 18 +++++++++++++++--- langs/layers/da.json | 7 ++++++- langs/layers/de.json | 7 ++++++- langs/layers/en.json | 7 ++++++- src/UI/Base/Link.ts | 9 ++++++++- src/UI/SpecialVisualizations.ts | 9 +++++++-- src/Utils.ts | 2 +- 7 files changed, 49 insertions(+), 10 deletions(-) diff --git a/assets/layers/usersettings/usersettings.json b/assets/layers/usersettings/usersettings.json index eec5afadc..0f15f3756 100644 --- a/assets/layers/usersettings/usersettings.json +++ b/assets/layers/usersettings/usersettings.json @@ -264,9 +264,21 @@ { "id": "mangrove-keys", "render": { - "en": "Download the private key for your Mangrove Account

Anyone possessing this file can make reviews with your identity

", - "de": "Laden Sie den privaten Schlüssel für Ihr Mangrove-Konto herunter

Jeder, der diese Datei besitzt, kann mit Ihrer Identität Rezensionen vornehmen

", - "da": "Hent den private nøgle til din Mangrove-konto

Enhver, der har denne fil, kan lave ændringer med din identitet

" + "special": { + "type": "link", + "href": "data:application/json,{mangroveidentity}", + "download": "mangrove_private_key_{_name}", + "text": { + "en": "Download the private key for your Mangrove Account", + "de": "Laden Sie den privaten Schlüssel für Ihr Mangrove-Konto herunter", + "da": "Hent den private nøgle til din Mangrove-konto" + } + }, + "after": { + "en": "Anyone possessing this file can make reviews with your identity", + "de": "Jeder, der diese Datei besitzt, kann mit Ihrer Identität Rezensionen vornehmen", + "da": "Enhver, der har denne fil, kan lave ændringer med din identitet" + } } }, { diff --git a/langs/layers/da.json b/langs/layers/da.json index dc1881c7b..c292c0ae0 100644 --- a/langs/layers/da.json +++ b/langs/layers/da.json @@ -2966,7 +2966,12 @@ } }, "mangrove-keys": { - "render": "Hent den private nøgle til din Mangrove-konto

Enhver, der har denne fil, kan lave ændringer med din identitet

" + "render": { + "after": "Enhver, der har denne fil, kan lave ændringer med din identitet", + "special": { + "text": "Hent den private nøgle til din Mangrove-konto" + } + } }, "picture-license": { "mappings": { diff --git a/langs/layers/de.json b/langs/layers/de.json index b4224d6c7..c69e5f461 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -9592,7 +9592,12 @@ } }, "mangrove-keys": { - "render": "Laden Sie den privaten Schlüssel für Ihr Mangrove-Konto herunter

Jeder, der diese Datei besitzt, kann mit Ihrer Identität Rezensionen vornehmen

" + "render": { + "after": "Jeder, der diese Datei besitzt, kann mit Ihrer Identität Rezensionen vornehmen", + "special": { + "text": "Laden Sie den privaten Schlüssel für Ihr Mangrove-Konto herunter" + } + } }, "picture-license": { "mappings": { diff --git a/langs/layers/en.json b/langs/layers/en.json index ebd842517..460b13f6c 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -9680,7 +9680,12 @@ } }, "mangrove-keys": { - "render": "Download the private key for your Mangrove Account

Anyone possessing this file can make reviews with your identity

" + "render": { + "after": "Anyone possessing this file can make reviews with your identity", + "special": { + "text": "Download the private key for your Mangrove Account" + } + } }, "picture-license": { "mappings": { diff --git a/src/UI/Base/Link.ts b/src/UI/Base/Link.ts index 25f107a47..693f26218 100644 --- a/src/UI/Base/Link.ts +++ b/src/UI/Base/Link.ts @@ -1,18 +1,22 @@ import Translations from "../i18n/Translations" import BaseUIElement from "../BaseUIElement" import { Store } from "../../Logic/UIEventSource" +import { Utils } from "../../Utils" export default class Link extends BaseUIElement { private readonly _href: string | Store private readonly _embeddedShow: BaseUIElement private readonly _newTab: boolean + private readonly _download: string constructor( embeddedShow: BaseUIElement | string, href: string | Store, - newTab: boolean = false + newTab: boolean = false, + download: string = undefined ) { super() + this._download = download this._embeddedShow = Translations.W(embeddedShow) this._href = href this._newTab = newTab @@ -58,6 +62,9 @@ export default class Link extends BaseUIElement { if (this._newTab) { el.target = "_blank" } + if (this._download) { + el.download = this._download + } el.appendChild(embeddedShow) return el } diff --git a/src/UI/SpecialVisualizations.ts b/src/UI/SpecialVisualizations.ts index 213451e97..a1803e539 100644 --- a/src/UI/SpecialVisualizations.ts +++ b/src/UI/SpecialVisualizations.ts @@ -1155,19 +1155,24 @@ export default class SpecialVisualizations { name: "class", doc: "CSS-classes to add to the element", }, + { + name: "download", + doc: "If set, this link will act as a download-button. The contents of `href` will be offered for download; this parameter will act as the proposed filename", + }, ], constr( state: SpecialVisualizationState, tagSource: UIEventSource>, args: string[] ): BaseUIElement { - const [text, href, classnames] = args + const [text, href, classnames, download] = args return new VariableUiElement( tagSource.map((tags) => new Link( Utils.SubstituteKeys(text, tags), Utils.SubstituteKeys(href, tags), - true + download === undefined, + Utils.SubstituteKeys(download, tags) ).SetClass(classnames) ) ) diff --git a/src/Utils.ts b/src/Utils.ts index 9767027f4..95927ce1b 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -451,7 +451,7 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be */ public static SubstituteKeys( txt: string | undefined, - tags?: Record, + tags: Record | undefined, useLang?: string ): string | undefined { if (txt === undefined) {