From c09b437d9aa24e20ce89fa3b1935da14de329b35 Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Tue, 30 Aug 2022 20:29:49 +0200 Subject: [PATCH] Add link to wikipedia-image in the attribution box, fix #1049 --- Logic/ImageProviders/LicenseInfo.ts | 1 + Logic/ImageProviders/WikimediaImageProvider.ts | 3 ++- UI/Image/Attribution.ts | 15 +++++++++++++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/Logic/ImageProviders/LicenseInfo.ts b/Logic/ImageProviders/LicenseInfo.ts index d6353c5b68..0a9f837de6 100644 --- a/Logic/ImageProviders/LicenseInfo.ts +++ b/Logic/ImageProviders/LicenseInfo.ts @@ -8,4 +8,5 @@ export class LicenseInfo { copyrighted: boolean = false; credit: string = ""; description: string = ""; + informationLocation: URL = undefined } \ No newline at end of file diff --git a/Logic/ImageProviders/WikimediaImageProvider.ts b/Logic/ImageProviders/WikimediaImageProvider.ts index 352900f04b..305070ffe1 100644 --- a/Logic/ImageProviders/WikimediaImageProvider.ts +++ b/Logic/ImageProviders/WikimediaImageProvider.ts @@ -129,7 +129,7 @@ export class WikimediaImageProvider extends ImageProvider { if (pageInfo === undefined) { return undefined; } - + const license = (pageInfo.imageinfo ?? [])[0]?.extmetadata; if (license === undefined) { console.warn("The file", filename, "has no usable metedata or license attached... Please fix the license info file yourself!") @@ -153,6 +153,7 @@ export class WikimediaImageProvider extends ImageProvider { licenseInfo.licenseShortName = license.LicenseShortName?.value; licenseInfo.credit = license.Credit?.value; licenseInfo.description = license.ImageDescription?.value; + licenseInfo.informationLocation = new URL("https://en.wikipedia.org/wiki/"+pageInfo.title) return licenseInfo; } diff --git a/UI/Image/Attribution.ts b/UI/Image/Attribution.ts index 84d8c2d2ae..adf70d39bf 100644 --- a/UI/Image/Attribution.ts +++ b/UI/Image/Attribution.ts @@ -2,10 +2,14 @@ import Combine from "../Base/Combine"; import Translations from "../i18n/Translations"; import BaseUIElement from "../BaseUIElement"; import {VariableUiElement} from "../Base/VariableUIElement"; -import {Store, UIEventSource} from "../../Logic/UIEventSource"; +import {Store} from "../../Logic/UIEventSource"; import {LicenseInfo} from "../../Logic/ImageProviders/LicenseInfo"; import {FixedUiElement} from "../Base/FixedUiElement"; +import Link from "../Base/Link"; +/** + * Small box in the bottom left of an image, e.g. the image in a popup + */ export default class Attribution extends VariableUiElement { constructor(license: Store, icon: BaseUIElement, date?: Date) { @@ -18,11 +22,18 @@ export default class Attribution extends VariableUiElement { return undefined } + let title = undefined; + if (license?.title) { + title = Translations.W(license?.title).SetClass("block") + if (license.informationLocation) { + title = new Link(title, license.informationLocation.href, true) + } + } return new Combine([ icon?.SetClass("block left").SetStyle("height: 2em; width: 2em; padding-right: 0.5em;"), new Combine([ - Translations.W(license?.title).SetClass("block"), + title, Translations.W(license?.artist ?? "").SetClass("block font-bold"), Translations.W(license?.license ?? license?.licenseShortName), date === undefined ? undefined : new FixedUiElement(date.toLocaleDateString())