63 lines
2.4 KiB
TypeScript
63 lines
2.4 KiB
TypeScript
import { VariableUiElement } from "./VariableUIElement"
|
|
import Locale from "../i18n/Locale"
|
|
import Link from "./Link"
|
|
import Svg from "../../Svg"
|
|
|
|
export default class LinkToWeblate extends VariableUiElement {
|
|
private static URI: any
|
|
constructor(context: string, availableTranslations: object) {
|
|
super(
|
|
Locale.language.map(
|
|
(ln) => {
|
|
if (Locale.showLinkToWeblate.data === false) {
|
|
return undefined
|
|
}
|
|
if (availableTranslations["*"] !== undefined) {
|
|
return undefined
|
|
}
|
|
if (context === undefined || context.indexOf(":") < 0) {
|
|
return undefined
|
|
}
|
|
const icon = Svg.translate_svg().SetClass(
|
|
"rounded-full border border-gray-400 inline-block w-4 h-4 m-1 weblate-link self-center"
|
|
)
|
|
if (availableTranslations[ln] === undefined) {
|
|
icon.SetClass("bg-red-400")
|
|
}
|
|
return new Link(icon, LinkToWeblate.hrefToWeblate(ln, context), true)
|
|
},
|
|
[Locale.showLinkToWeblate]
|
|
)
|
|
)
|
|
this.SetClass("enable-links hidden-on-mobile")
|
|
}
|
|
|
|
public static hrefToWeblate(language: string, contextKey: string): string {
|
|
if (contextKey === undefined || contextKey.indexOf(":") < 0) {
|
|
return undefined
|
|
}
|
|
const [category, ...rest] = contextKey.split(":")
|
|
const key = rest.join(":")
|
|
|
|
const baseUrl = "https://hosted.weblate.org/translate/mapcomplete/"
|
|
return baseUrl + category + "/" + language + "/?offset=1&q=context%3A%3D%22" + key + "%22"
|
|
}
|
|
|
|
public static hrefToWeblateZen(
|
|
language: string,
|
|
category: "core" | "themes" | "layers" | "shared-questions" | "glossary" | string,
|
|
searchKey: string
|
|
): string {
|
|
const baseUrl = "https://hosted.weblate.org/zen/mapcomplete/"
|
|
// ?offset=1&q=+state%3A%3Ctranslated+context%3Acampersite&sort_by=-priority%2Cposition&checksum=
|
|
return (
|
|
baseUrl +
|
|
category +
|
|
"/" +
|
|
language +
|
|
"?offset=1&q=+state%3A%3Ctranslated+context%3A" +
|
|
encodeURIComponent(searchKey) +
|
|
"&sort_by=-priority%2Cposition&checksum="
|
|
)
|
|
}
|
|
}
|