forked from MapComplete/MapComplete
		
	Seperate logic to detect special renderings and to actually render them, add a minimap to all popups (if no minimap is defined seperately)
This commit is contained in:
		
							parent
							
								
									ab0d510cdd
								
							
						
					
					
						commit
						284102c2f1
					
				
					 6 changed files with 118 additions and 57 deletions
				
			
		|  | @ -25,16 +25,18 @@ import Loc from "../Models/Loc"; | |||
| import {Utils} from "../Utils"; | ||||
| import BaseLayer from "../Models/BaseLayer"; | ||||
| 
 | ||||
| export interface SpecialVisualization{ | ||||
|     funcName: string, | ||||
|     constr: ((state: State, tagSource: UIEventSource<any>, argument: string[]) => BaseUIElement), | ||||
|     docs: string, | ||||
|     example?: string, | ||||
|     args: { name: string, defaultValue?: string, doc: string }[] | ||||
| } | ||||
| 
 | ||||
| export default class SpecialVisualizations { | ||||
| 
 | ||||
| 
 | ||||
|     public static specialVisualizations: { | ||||
|         funcName: string, | ||||
|         constr: ((state: State, tagSource: UIEventSource<any>, argument: string[]) => BaseUIElement), | ||||
|         docs: string, | ||||
|         example?: string, | ||||
|         args: { name: string, defaultValue?: string, doc: string }[] | ||||
|     }[] = | ||||
|     public static specialVisualizations: SpecialVisualization[] = | ||||
|         [ | ||||
|             { | ||||
|                 funcName: "all_tags", | ||||
|  | @ -93,7 +95,7 @@ export default class SpecialVisualizations { | |||
|                 docs: "A small map showing the selected feature. Note that no styling is applied, wrap this in a div", | ||||
|                 args: [ | ||||
|                     { | ||||
|                         doc: "The zoomlevel: the higher, the more zoomed in with 1 being the entire world and 19 being really close", | ||||
|                         doc: "The (maximum) zoomlevel: the target zoomlevel after fitting the entire feature. The minimap will fit the entire feature, then zoom out to this zoom level. The higher, the more zoomed in with 1 being the entire world and 19 being really close", | ||||
|                         name: "zoomlevel", | ||||
|                         defaultValue: "18" | ||||
|                     }, | ||||
|  | @ -135,17 +137,26 @@ export default class SpecialVisualizations { | |||
|                             zoom = parsed; | ||||
|                         } | ||||
|                     } | ||||
|                     const locationSource =new UIEventSource<Loc>({ | ||||
|                         lat: Number(properties._lat), | ||||
|                         lon: Number(properties._lon), | ||||
|                         zoom: zoom | ||||
|                     }) | ||||
|                     const minimap = SpecialVisualizations.constructMiniMap( | ||||
|                         { | ||||
|                             background: state.backgroundLayer, | ||||
|                             location: new UIEventSource<Loc>({ | ||||
|                                 lat: Number(properties._lat), | ||||
|                                 lon: Number(properties._lon), | ||||
|                                 zoom: zoom | ||||
|                             }), | ||||
|                             location: locationSource, | ||||
|                             allowMoving: false | ||||
|                         } | ||||
|                     ) | ||||
|                      | ||||
|                     locationSource.addCallback(loc => { | ||||
|                         if(loc.zoom > zoom){ | ||||
|                             // We zoom back
 | ||||
|                             locationSource.data.zoom = zoom; | ||||
|                             locationSource.ping(); | ||||
|                         } | ||||
|                     }) | ||||
| 
 | ||||
|                     SpecialVisualizations.constructShowDataLayer( | ||||
|                         featuresToShow, | ||||
|  | @ -362,6 +373,19 @@ export default class SpecialVisualizations { | |||
|             } | ||||
| 
 | ||||
|         ] | ||||
|      | ||||
|     private static byName() : Map<string, SpecialVisualization>{ | ||||
|         const result = new Map<string, SpecialVisualization>(); | ||||
| 
 | ||||
|         for (const specialVisualization of SpecialVisualizations.specialVisualizations) { | ||||
|             result.set(specialVisualization.funcName, specialVisualization) | ||||
|         } | ||||
|          | ||||
|         return result; | ||||
|     } | ||||
|      | ||||
|     public static specialVisualisationsByName: Map<string, SpecialVisualization> = SpecialVisualizations.byName(); | ||||
|      | ||||
|     static HelpMessage: BaseUIElement = SpecialVisualizations.GenHelpMessage(); | ||||
|     static constructMiniMap: (options?: { | ||||
|         background?: UIEventSource<BaseLayer>, | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue