| 
									
										
										
										
											2020-07-22 23:47:04 +02:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Wraps the query parameters into UIEventSources | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2020-08-17 17:23:15 +02:00
										 |  |  | import {UIEventSource} from "../UIEventSource"; | 
					
						
							| 
									
										
										
										
											2020-07-22 23:47:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | export class QueryParameters { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-23 17:32:18 +02:00
										 |  |  |     private static order: string [] = ["layout","test","z","lat","lon"]; | 
					
						
							| 
									
										
										
										
											2020-07-31 17:11:44 +02:00
										 |  |  |     private static knownSources = {}; | 
					
						
							|  |  |  |     private static initialized = false; | 
					
						
							| 
									
										
										
										
											2020-07-29 15:05:19 +02:00
										 |  |  |     private static defaults = {} | 
					
						
							| 
									
										
										
										
											2020-07-22 23:47:04 +02:00
										 |  |  |      | 
					
						
							|  |  |  |     private static addOrder(key){ | 
					
						
							|  |  |  |         if(this.order.indexOf(key) < 0){ | 
					
						
							|  |  |  |             this.order.push(key) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     private static init() { | 
					
						
							| 
									
										
										
										
											2020-07-31 17:11:44 +02:00
										 |  |  |          | 
					
						
							|  |  |  |         if(this.initialized){ | 
					
						
							| 
									
										
										
										
											2020-07-25 18:00:08 +02:00
										 |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-07-31 17:11:44 +02:00
										 |  |  |         this.initialized = true; | 
					
						
							|  |  |  |         | 
					
						
							|  |  |  |         if (window?.location?.search) { | 
					
						
							| 
									
										
										
										
											2020-07-22 23:47:04 +02:00
										 |  |  |             const params = window.location.search.substr(1).split("&"); | 
					
						
							|  |  |  |             for (const param of params) { | 
					
						
							|  |  |  |                 const kv = param.split("="); | 
					
						
							| 
									
										
										
										
											2020-10-17 03:56:08 +02:00
										 |  |  |                 const key = decodeURIComponent(kv[0]); | 
					
						
							| 
									
										
										
										
											2020-07-22 23:47:04 +02:00
										 |  |  |                 QueryParameters.addOrder(key) | 
					
						
							| 
									
										
										
										
											2020-10-17 03:56:08 +02:00
										 |  |  |                 const v = decodeURIComponent(kv[1]); | 
					
						
							| 
									
										
										
										
											2020-07-22 23:47:04 +02:00
										 |  |  |                 const source = new UIEventSource<string>(v); | 
					
						
							|  |  |  |                 source.addCallback(() => QueryParameters.Serialize()) | 
					
						
							| 
									
										
										
										
											2020-07-31 17:11:44 +02:00
										 |  |  |                 QueryParameters.knownSources[key] = source; | 
					
						
							| 
									
										
										
										
											2020-07-22 23:47:04 +02:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     private static Serialize() { | 
					
						
							|  |  |  |         const parts = [] | 
					
						
							|  |  |  |         for (const key of QueryParameters.order) { | 
					
						
							|  |  |  |             if (QueryParameters.knownSources[key] === undefined || QueryParameters.knownSources[key].data === undefined) { | 
					
						
							|  |  |  |                 continue; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2020-07-29 15:05:19 +02:00
										 |  |  |             if (QueryParameters.knownSources[key].data == QueryParameters.defaults[key]) { | 
					
						
							|  |  |  |                 continue; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2020-07-22 23:47:04 +02:00
										 |  |  |             parts.push(encodeURIComponent(key) + "=" + encodeURIComponent(QueryParameters.knownSources[key].data)) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         history.replaceState(null, "", "?" + parts.join("&")); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-29 15:05:19 +02:00
										 |  |  |     public static GetQueryParameter(key: string, deflt: string): UIEventSource<string> { | 
					
						
							| 
									
										
										
										
											2020-07-31 17:11:44 +02:00
										 |  |  |         if(!this.initialized){ | 
					
						
							|  |  |  |             this.init(); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-07-31 01:45:54 +02:00
										 |  |  |         if (deflt !== undefined) { | 
					
						
							|  |  |  |             QueryParameters.defaults[key] = deflt; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-07-22 23:47:04 +02:00
										 |  |  |         if (QueryParameters.knownSources[key] !== undefined) { | 
					
						
							|  |  |  |             return QueryParameters.knownSources[key]; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         QueryParameters.addOrder(key); | 
					
						
							| 
									
										
										
										
											2020-07-29 15:05:19 +02:00
										 |  |  |         const source = new UIEventSource<string>(deflt); | 
					
						
							| 
									
										
										
										
											2020-07-22 23:47:04 +02:00
										 |  |  |         QueryParameters.knownSources[key] = source; | 
					
						
							|  |  |  |         source.addCallback(() => QueryParameters.Serialize()) | 
					
						
							|  |  |  |         return source; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |