import Combine from "../Base/Combine"; import Translations from "../i18n/Translations"; import BaseUIElement from "../BaseUIElement"; import {VariableUiElement} from "../Base/VariableUIElement"; 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) { if (license === undefined) { throw "No license source given in the attribution element" } super( license.map((license: LicenseInfo) => { if (license === undefined) { 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([ title, Translations.W(license?.artist ?? "").SetClass("block font-bold"), Translations.W(license?.license ?? license?.licenseShortName), date === undefined ? undefined : new FixedUiElement(date.toLocaleDateString()) ]).SetClass("flex flex-col") ]).SetClass("flex flex-row bg-black text-white text-sm absolute bottom-0 left-0 p-0.5 pl-5 pr-3 rounded-lg no-images") })); } }