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