39 lines
1.3 KiB
TypeScript
39 lines
1.3 KiB
TypeScript
import UrlValidator from "./UrlValidator"
|
|
import { Translation } from "../../i18n/Translation"
|
|
|
|
export default class ImageUrlValidator extends UrlValidator {
|
|
private static readonly allowedExtensions = ["jpg", "jpeg", "svg", "png"]
|
|
|
|
constructor() {
|
|
super(
|
|
"image",
|
|
"Same as the URL-parameter, except that it checks that the URL ends with `.jpg`, `.png` or some other typical image format"
|
|
)
|
|
}
|
|
|
|
private static hasValidExternsion(str: string): boolean {
|
|
str = str.toLowerCase()
|
|
return ImageUrlValidator.allowedExtensions.some((ext) => str.endsWith(ext))
|
|
}
|
|
|
|
getFeedback(s: string, _?: () => string): Translation | undefined {
|
|
const superF = super.getFeedback(s, _)
|
|
if (superF) {
|
|
return superF
|
|
}
|
|
if (!ImageUrlValidator.hasValidExternsion(s)) {
|
|
return new Translation(
|
|
"This URL does not end with one of the allowed extensions. These are: " +
|
|
ImageUrlValidator.allowedExtensions.join(", ")
|
|
)
|
|
}
|
|
return undefined
|
|
}
|
|
|
|
isValid(str: string): boolean {
|
|
if (!super.isValid(str)) {
|
|
return false
|
|
}
|
|
return ImageUrlValidator.hasValidExternsion(str)
|
|
}
|
|
}
|