43 lines
1.5 KiB
TypeScript
43 lines
1.5 KiB
TypeScript
import ExtraLinkConfigJson from "./Json/ExtraLinkConfigJson"
|
|
import { Translation } from "../../UI/i18n/Translation"
|
|
import Translations from "../../UI/i18n/Translations"
|
|
|
|
export default class ExtraLinkConfig {
|
|
public readonly icon?: string
|
|
public readonly text?: Translation
|
|
public readonly href: string
|
|
public readonly newTab?: false | boolean
|
|
public readonly requirements?: Set<
|
|
"iframe" | "no-iframe" | "welcome-message" | "no-welcome-message"
|
|
>
|
|
|
|
constructor(configJson: ExtraLinkConfigJson, context) {
|
|
this.icon = configJson.icon
|
|
this.text = Translations.T(configJson.text, "themes:" + context + ".text")
|
|
this.href = configJson.href
|
|
this.newTab = configJson.newTab
|
|
this.requirements = new Set(configJson.requirements)
|
|
|
|
for (let requirement of configJson.requirements) {
|
|
if (this.requirements.has(<any>("no-" + requirement))) {
|
|
throw (
|
|
"Conflicting requirements found for " +
|
|
context +
|
|
".extraLink: both '" +
|
|
requirement +
|
|
"' and 'no-" +
|
|
requirement +
|
|
"' found"
|
|
)
|
|
}
|
|
}
|
|
|
|
if (this.icon === undefined && this.text === undefined) {
|
|
throw (
|
|
"At " +
|
|
context +
|
|
".extraLink: define at least an icon or a text to show. Both are undefined, this is not allowed"
|
|
)
|
|
}
|
|
}
|
|
}
|