forked from MapComplete/MapComplete
		
	Refactored out 'layout.ts'
This commit is contained in:
		
							parent
							
								
									36f5e896df
								
							
						
					
					
						commit
						73f32e0ecf
					
				
					 30 changed files with 465 additions and 400 deletions
				
			
		
							
								
								
									
										40
									
								
								State.ts
									
										
									
									
									
								
							
							
						
						
									
										40
									
								
								State.ts
									
										
									
									
									
								
							|  | @ -1,5 +1,4 @@ | |||
| import {UIElement} from "./UI/UIElement"; | ||||
| import {Layout} from "./Customizations/Layout"; | ||||
| import {Utils} from "./Utils"; | ||||
| import {ElementStorage} from "./Logic/ElementStorage"; | ||||
| import {Changes} from "./Logic/Osm/Changes"; | ||||
|  | @ -12,6 +11,7 @@ import {UIEventSource} from "./Logic/UIEventSource"; | |||
| import {LocalStorageSource} from "./Logic/Web/LocalStorageSource"; | ||||
| import {QueryParameters} from "./Logic/Web/QueryParameters"; | ||||
| import {BaseLayer} from "./Logic/BaseLayer"; | ||||
| import LayoutConfig from "./Customizations/JSON/LayoutConfig"; | ||||
| 
 | ||||
| /** | ||||
|  * Contains the global state: a bunch of UI-event sources | ||||
|  | @ -38,9 +38,9 @@ export default class State { | |||
|         minZoomLevelToAddNewPoints: (Utils.isRetina() ? 18 : 19) | ||||
|     }; | ||||
| 
 | ||||
|     public static runningFromConsole: boolean = false;  | ||||
|     public static runningFromConsole: boolean = false; | ||||
| 
 | ||||
|     public readonly layoutToUse = new UIEventSource<Layout>(undefined); | ||||
|     public readonly layoutToUse = new UIEventSource<LayoutConfig>(undefined); | ||||
| 
 | ||||
|     /** | ||||
|      The mapping from id -> UIEventSource<properties> | ||||
|  | @ -113,7 +113,7 @@ export default class State { | |||
|         accuracy: number | ||||
|     }> = new UIEventSource<{ latlng: {lat:number, lng:number}, accuracy: number }>(undefined); | ||||
|     public layoutDefinition: string; | ||||
|     public installedThemes: UIEventSource<{ layout: Layout; definition: string }[]>; | ||||
|     public installedThemes: UIEventSource<{ layout: LayoutConfig; definition: string }[]>; | ||||
| 
 | ||||
|     public layerControlIsOpened: UIEventSource<boolean> = QueryParameters.GetQueryParameter("layer-control-toggle", "false") | ||||
|         .map<boolean>((str) => str !== "false", [], b => "" + b) | ||||
|  | @ -122,7 +122,7 @@ export default class State { | |||
|         str => isNaN(Number(str)) ? 0 : Number(str), [], n => "" + n | ||||
|     ); | ||||
| 
 | ||||
|     constructor(layoutToUse: Layout) { | ||||
|     constructor(layoutToUse: LayoutConfig) { | ||||
|         const self = this; | ||||
|         this.layoutToUse.setData(layoutToUse); | ||||
| 
 | ||||
|  | @ -138,7 +138,7 @@ export default class State { | |||
|             }) | ||||
|         } | ||||
|         this.zoom = asFloat( | ||||
|             QueryParameters.GetQueryParameter("z", "" + layoutToUse.startzoom) | ||||
|             QueryParameters.GetQueryParameter("z", "" + layoutToUse.startZoom) | ||||
|             .syncWith(LocalStorageSource.Get("zoom"))); | ||||
|         this.lat = asFloat(QueryParameters.GetQueryParameter("lat", "" + layoutToUse.startLat) | ||||
|             .syncWith(LocalStorageSource.Get("lat"))); | ||||
|  | @ -158,14 +158,14 @@ export default class State { | |||
| 
 | ||||
|         this.layoutToUse.addCallback(layoutToUse => { | ||||
|             const lcd = self.locationControl.data; | ||||
|             lcd.zoom = lcd.zoom ?? layoutToUse?.startzoom; | ||||
|             lcd.zoom = lcd.zoom ?? layoutToUse?.startZoom; | ||||
|             lcd.lat = lcd.lat ?? layoutToUse?.startLat; | ||||
|             lcd.lon = lcd.lon ?? layoutToUse?.startLon; | ||||
|             self.locationControl.ping(); | ||||
|         }); | ||||
| 
 | ||||
| 
 | ||||
|         function featSw(key: string, deflt: (layout: Layout) => boolean): UIEventSource<boolean> { | ||||
|         function featSw(key: string, deflt: (layout: LayoutConfig) => boolean): UIEventSource<boolean> { | ||||
|             const queryParameterSource = QueryParameters.GetQueryParameter(key, undefined); | ||||
|             // I'm so sorry about someone trying to decipher this
 | ||||
| 
 | ||||
|  | @ -182,7 +182,7 @@ export default class State { | |||
|         this.featureSwitchUserbadge = featSw("fs-userbadge", (layoutToUse) => layoutToUse?.enableUserBadge ?? true); | ||||
|         this.featureSwitchSearch = featSw("fs-search", (layoutToUse) => layoutToUse?.enableSearch ?? true); | ||||
|         this.featureSwitchLayers = featSw("fs-layers", (layoutToUse) => layoutToUse?.enableLayers ?? true); | ||||
|         this.featureSwitchAddNew = featSw("fs-add-new", (layoutToUse) => layoutToUse?.enableAdd ?? true); | ||||
|         this.featureSwitchAddNew = featSw("fs-add-new", (layoutToUse) => layoutToUse?.enableAddNewPoints ?? true); | ||||
|         this.featureSwitchWelcomeMessage = featSw("fs-welcome-message", () => true); | ||||
|         this.featureSwitchIframe = featSw("fs-iframe", () => false); | ||||
|         this.featureSwitchMoreQuests = featSw("fs-more-quests", (layoutToUse) => layoutToUse?.enableMoreQuests ?? true); | ||||
|  | @ -198,8 +198,8 @@ export default class State { | |||
|         ); | ||||
| 
 | ||||
| 
 | ||||
|         this.installedThemes = this.osmConnection.preferencesHandler.preferences.map<{ layout: Layout, definition: string }[]>(allPreferences => { | ||||
|             const installedThemes: { layout: Layout, definition: string }[] = []; | ||||
|         this.installedThemes = this.osmConnection.preferencesHandler.preferences.map<{ layout: LayoutConfig, definition: string }[]>(allPreferences => { | ||||
|             const installedThemes: { layout: LayoutConfig, definition: string }[] = []; | ||||
|             if (allPreferences === undefined) { | ||||
|                 return installedThemes; | ||||
|             } | ||||
|  | @ -208,18 +208,13 @@ export default class State { | |||
|                 const themename = allPreferencesKey.match(/^mapcomplete-installed-theme-(.*)-combined-length$/); | ||||
|                 if (themename && themename[1] !== "") { | ||||
|                     const customLayout = self.osmConnection.GetLongPreference("installed-theme-" + themename[1]); | ||||
|                     if(customLayout.data === undefined){ | ||||
|                     if (customLayout.data === undefined) { | ||||
|                         console.log("No data defined for ", themename[1]); | ||||
|                         continue; | ||||
|                     } | ||||
|                     try { | ||||
|                         const layout = State.FromBase64(customLayout.data); | ||||
|                         if(layout.id === undefined){ | ||||
|                             // This is an old style theme
 | ||||
|                             // We remove it
 | ||||
|                             customLayout.setData(undefined); | ||||
|                             continue; | ||||
|                         } | ||||
|                         const layout = new LayoutConfig( | ||||
|                             JSON.parse(btoa(customLayout.data))); | ||||
|                         installedThemes.push({ | ||||
|                             layout: layout, | ||||
|                             definition: customLayout.data | ||||
|  | @ -257,10 +252,10 @@ export default class State { | |||
|             if (layoutToUse === undefined) { | ||||
|                 return; | ||||
|             } | ||||
|             if (this.layoutToUse.data.supportedLanguages.indexOf(currentLanguage) < 0) { | ||||
|                 console.log("Resetting language to", layoutToUse.supportedLanguages[0], "as", currentLanguage, " is unsupported") | ||||
|             if (this.layoutToUse.data.language.indexOf(currentLanguage) < 0) { | ||||
|                 console.log("Resetting language to", layoutToUse.language[0], "as", currentLanguage, " is unsupported") | ||||
|                 // The current language is not supported -> switch to a supported one
 | ||||
|                 Locale.language.setData(layoutToUse.supportedLanguages[0]); | ||||
|                 Locale.language.setData(layoutToUse.language[0]); | ||||
|             } | ||||
|         }).ping() | ||||
| 
 | ||||
|  | @ -288,5 +283,4 @@ export default class State { | |||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     public static FromBase64 : (data: string) => Layout = undefined; | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue