import { html } from "lit-html"; import { styleMap } from "lit-html/directives/style-map.js"; import { dataUrlToBlob } from "./util"; import { ProfilePictureGeneratorSettings } from "./main"; function fileUpload(text: string, className: string[]) { return html` `; } function languageSelector( languages: { id: string; name: string }[], className: string[], ariaLabel: string ) { return html` `; } function zoomIcon() { return html` `; } function zoomSlider( title: string, className: string[], menuClassName: string[], ) { // min and max are default values (making it explicit here though); // actual zoom factor will be non-linear return html`
`; } function imageElement(src: string, altText: string, className: string[]) { return html`
${altText}
`; } function downloadElement( text: string, fileName: string, href: string, className: string[] ) { return html` ${text} `; } function loadingScreen() { return html`
`; } function privacyNote(text: string) { return html`
${text}
`; } function privacyLink(text: string, link: string) { return html` ${text} `; } export function template( settings: ProfilePictureGeneratorSettings, state: { loading: boolean; downloadUrl: string } ) { const languages: { id: string; name: string }[] = Object.entries( settings.languages ) .map(([id, { name }]) => ({ id, name })) .sort(({ name: a }, { name: b }) => a.localeCompare(b)); return html`
${languageSelector( languages, settings.languageSelectorClass, settings.languageSelectorLabel )} ${fileUpload(settings.uploadButtonTitle, settings.uploadButtonClass)} ${settings.zoom && state.downloadUrl ? zoomSlider( settings.zoomLabel, settings.dropDownClass.concat(settings.dropDownButtonClass), settings.dropDownMenuClass ) : null}
${state.loading ? loadingScreen() : imageElement( state.downloadUrl ? state.downloadUrl : settings.imagePreview, settings.imageAltText, settings.imageClass )} ${state.downloadUrl ? downloadElement( settings.downloadButtonTitle, settings.fileName, state.downloadUrl, settings.downloadButtonClass ) : null} ${privacyNote(settings.privacyNote)} ${privacyLink(settings.privacyLinkText, settings.privacyLink)} `; }