forked from MapComplete/MapComplete
		
	Refactoring fullscreenhandling
This commit is contained in:
		
							parent
							
								
									e1a4c75391
								
							
						
					
					
						commit
						00f610c589
					
				
					 23 changed files with 346 additions and 245 deletions
				
			
		|  | @ -17,7 +17,6 @@ export default class StrayClickHandler { | |||
|         selectedElement: UIEventSource<string>, | ||||
|         filteredLayers: UIEventSource<{ readonly isDisplayed: UIEventSource<boolean> }[]>, | ||||
|         leafletMap: UIEventSource<L.Map>, | ||||
|         fullscreenMessage: UIEventSource<{content: UIElement, hashText: string}>, | ||||
|         uiToShow: (() => UIElement)) { | ||||
|         this._uiToShow = uiToShow; | ||||
|         const self = this; | ||||
|  |  | |||
|  | @ -3,31 +3,70 @@ import LayoutConfig from "../../Customizations/JSON/LayoutConfig"; | |||
| import Translations from "../../UI/i18n/Translations"; | ||||
| import Locale from "../../UI/i18n/Locale"; | ||||
| import {UIElement} from "../../UI/UIElement"; | ||||
| import TagRenderingAnswer from "../../UI/Popup/TagRenderingAnswer"; | ||||
| import {ElementStorage} from "../ElementStorage"; | ||||
| import Combine from "../../UI/Base/Combine"; | ||||
| 
 | ||||
| export default class TitleHandler{ | ||||
|     constructor(layoutToUse: UIEventSource<LayoutConfig>, fullScreenMessage: UIEventSource<{ content: UIElement, hashText: string, titleText?: UIElement }>) { | ||||
| class TitleElement extends UIElement { | ||||
|     private readonly _layoutToUse: UIEventSource<LayoutConfig>; | ||||
|     private readonly _selectedFeature: UIEventSource<any>; | ||||
|     private readonly _allElementsStorage: ElementStorage; | ||||
|      | ||||
|     constructor(layoutToUse: UIEventSource<LayoutConfig>, | ||||
|                 selectedFeature: UIEventSource<any>, | ||||
|                 allElementsStorage : ElementStorage) { | ||||
|         super(layoutToUse); | ||||
|         this._layoutToUse = layoutToUse; | ||||
|         this._selectedFeature = selectedFeature; | ||||
|         this._allElementsStorage = allElementsStorage; | ||||
|         this.ListenTo(Locale.language); | ||||
|         this.dumbMode = false; | ||||
|     } | ||||
|      | ||||
|     InnerRender(): string { | ||||
|          | ||||
|         const defaultTitle = Translations.WT(this._layoutToUse.data?.title)?.txt ?? "MapComplete" | ||||
|         const feature = this._selectedFeature.data; | ||||
| 
 | ||||
|         if(feature === undefined){ | ||||
|             return defaultTitle; | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         layoutToUse.map((layoutToUse) => { | ||||
|                 return Translations.WT(layoutToUse?.title)?.txt ?? "MapComplete" | ||||
|             }, [Locale.language] | ||||
|         ).addCallbackAndRun((title) => { | ||||
|             document.title = title | ||||
|         }); | ||||
|         const layout = this._layoutToUse.data; | ||||
|         const properties = this._selectedFeature.data.properties; | ||||
|          for (const layer of layout.layers) { | ||||
|              if(layer.title === undefined){ | ||||
|                  continue; | ||||
|              } | ||||
|             if (layer.overpassTags.matchesProperties(properties)) { | ||||
| 
 | ||||
|         fullScreenMessage.addCallbackAndRun(selected => { | ||||
|             const title = Translations.WT(layoutToUse.data?.title)?.txt ?? "MapComplete" | ||||
|             if(selected?.titleText?.data === undefined){ | ||||
|                 document.title = title | ||||
|             }else{ | ||||
|                 selected.titleText.Update(); | ||||
|                 var d = document.createElement('div'); | ||||
|                 d.innerHTML = selected.titleText.InnerRender(); | ||||
|                 const poi = (d.textContent || d.innerText) | ||||
|                 document.title = title + " | " + poi; | ||||
|                 const title = new TagRenderingAnswer( | ||||
|                     this._allElementsStorage.getEventSourceFor(feature), | ||||
|                     layer.title | ||||
|                 ) | ||||
|                 return new Combine([defaultTitle," | ", title]).Render(); | ||||
|             } | ||||
|         }) | ||||
|         } | ||||
|         return defaultTitle; | ||||
|     } | ||||
|      | ||||
| } | ||||
| 
 | ||||
| export default class TitleHandler { | ||||
|     constructor(layoutToUse: UIEventSource<LayoutConfig>, | ||||
|                 selectedFeature: UIEventSource<any>, | ||||
|                 allElementsStorage : ElementStorage) { | ||||
| 
 | ||||
|         new TitleElement(layoutToUse, selectedFeature, allElementsStorage) | ||||
|             .addCallbackAndRun(contents => { | ||||
| 
 | ||||
|                 const d = document.createElement('div'); | ||||
|                 d.innerHTML = contents; | ||||
|                 // We pass everything into a div to strip out images etc...
 | ||||
|                 document.title = (d.textContent || d.innerText); | ||||
| 
 | ||||
|             }); | ||||
|          | ||||
|     } | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue