forked from MapComplete/MapComplete
		
	More refactoring of the featurepipeline, introduction of fetching data from the OSM-API directly per tile, personal theme refactoring
This commit is contained in:
		
							parent
							
								
									0a9e7c0b36
								
							
						
					
					
						commit
						41a2a79fe9
					
				
					 48 changed files with 746 additions and 590 deletions
				
			
		
							
								
								
									
										21
									
								
								Utils.ts
									
										
									
									
									
								
							
							
						
						
									
										21
									
								
								Utils.ts
									
										
									
									
									
								
							|  | @ -192,11 +192,12 @@ export class Utils { | |||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Copies all key-value pairs of the source into the target. | ||||
|      * Copies all key-value pairs of the source into the target. This will change the target | ||||
|      * If the key starts with a '+', the values of the list will be appended to the target instead of overwritten | ||||
|      * @param source | ||||
|      * @param target | ||||
|      * @constructor | ||||
|      * @return the second parameter as is | ||||
|      */ | ||||
|     static Merge(source: any, target: any) { | ||||
|         for (const key in source) { | ||||
|  | @ -288,15 +289,13 @@ export class Utils { | |||
|     } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     private static injectedDownloads = {} | ||||
| 
 | ||||
|     public static injectJsonDownloadForTests(url: string, data) { | ||||
|         Utils.injectedDownloads[url] = data | ||||
|     } | ||||
| 
 | ||||
|     public static downloadJson(url: string, headers?: any): Promise<any> { | ||||
| 
 | ||||
|     public static download(url: string, headers?: any): Promise<string> { | ||||
|         const injected = Utils.injectedDownloads[url] | ||||
|         if (injected !== undefined) { | ||||
|             console.log("Using injected resource for test for URL", url) | ||||
|  | @ -311,17 +310,14 @@ export class Utils { | |||
|                 const xhr = new XMLHttpRequest(); | ||||
|                 xhr.onload = () => { | ||||
|                     if (xhr.status == 200) { | ||||
|                         try { | ||||
|                             resolve(JSON.parse(xhr.response)) | ||||
|                         } catch (e) { | ||||
|                             reject("Not a valid json: " + xhr.response) | ||||
|                         } | ||||
|                         resolve(xhr.response) | ||||
|                     } else if (xhr.status === 509 || xhr.status === 429){ | ||||
|                       reject("rate limited")   | ||||
|                     } else { | ||||
|                         reject(xhr.statusText) | ||||
|                     } | ||||
|                 }; | ||||
|                 xhr.open('GET', url); | ||||
|                 xhr.setRequestHeader("accept", "application/json") | ||||
|                 if (headers !== undefined) { | ||||
| 
 | ||||
|                     for (const key in headers) { | ||||
|  | @ -334,6 +330,11 @@ export class Utils { | |||
|         ) | ||||
|     } | ||||
| 
 | ||||
|     public static async downloadJson(url: string, headers?: any): Promise<any> { | ||||
|         const data = await Utils.download(url, Utils.Merge({"accept": "application/json"}, headers ?? {})) | ||||
|         return JSON.parse(data) | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Triggers a 'download file' popup which will download the contents | ||||
|      */ | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue