forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			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)
 | 
						|
    }
 | 
						|
}
 |