mapcomplete/UI/InputElement/Validators/ImageUrlValidator.ts

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)
}
}