forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			40 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			40 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) | ||
|  |     } | ||
|  | } |