forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			95 lines
		
	
	
		
			No EOL
		
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			No EOL
		
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import {UIElement} from "./UIElement";
 | |
| import Translations from "./i18n/Translations";
 | |
| import State from "../State";
 | |
| import Combine from "./Base/Combine";
 | |
| 
 | |
| /**
 | |
|  * Handles the full screen popup on mobile
 | |
|  */
 | |
| export class FullScreenMessageBox extends UIElement {
 | |
| 
 | |
|     private static readonly _toTheMap_height : string = "5em";
 | |
|     
 | |
|     private _uielement: UIElement;
 | |
|     private readonly returnToTheMap: UIElement;
 | |
| 
 | |
|     constructor(onClear: (() => void)) {
 | |
|         super(State.state.fullScreenMessage);
 | |
|         const self = this;
 | |
|         State.state.fullScreenMessage.addCallbackAndRun(uiElement => {
 | |
|             this._uielement = new Combine([State.state.fullScreenMessage.data]).SetStyle(
 | |
|                 "display:block;"+
 | |
|                 "padding: 1em;"+
 | |
|                 "padding-bottom:6em;"+
 | |
|                 `margin-bottom:${FullScreenMessageBox._toTheMap_height};`+
 | |
|                 "box-sizing:border-box;"+
 | |
|                 `height:calc(100vh - ${FullScreenMessageBox._toTheMap_height});`+
 | |
|                 "overflow-y: auto;" +
 | |
|                 "max-width:100vw;" +
 | |
|                 "overflow-x:hidden;" +
 | |
|                 "background:white;"
 | |
| 
 | |
|             );
 | |
|         });
 | |
|         
 | |
|         
 | |
|         this.HideOnEmpty(true);
 | |
| 
 | |
|         State.state.fullScreenMessage.addCallback(latestData => {
 | |
|             if (latestData === undefined) {
 | |
|                 location.hash = "";
 | |
|             } else {
 | |
|                 // The 'hash' makes sure a new piece of history is added. This makes the 'back-button' on android remove the popup
 | |
|                 location.hash = "#element";
 | |
|             }
 | |
|             this.Update();
 | |
|         })
 | |
| 
 | |
|         if (window !== undefined) {
 | |
|             window.onhashchange = function () {
 | |
|                 if (location.hash === "") {
 | |
|                     // No more element: back to the map!
 | |
|                     console.log("Clearing full screen message");
 | |
|                     State.state.fullScreenMessage.setData(undefined);
 | |
|                     onClear();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         this.returnToTheMap =
 | |
|             new Combine([Translations.t.general.returnToTheMap.Clone().SetStyle("font-size:xx-large")])
 | |
|             .SetStyle("background:#7ebc6f;" +
 | |
|                 "position: fixed;" +
 | |
|                 "z-index: 10000;" +
 | |
|                 "bottom: 0;" +
 | |
|                 "left: 0;" +
 | |
|                 `height: ${FullScreenMessageBox._toTheMap_height};` +
 | |
|                 "width: 100vw;" +
 | |
|                 "color: white;" +
 | |
|                 "font-weight: bold;" +
 | |
|                 "pointer-events: all;" +
 | |
|                 "cursor: pointer;" +
 | |
|                 "padding-top: 1.2em;" +
 | |
|                 "text-align: center;" +
 | |
|                 "padding-bottom: 1.2em;" +
 | |
|                 "box-sizing:border-box")
 | |
|             .onClick(() => {
 | |
|                 console.log("Returning...")
 | |
|                 State.state.fullScreenMessage.setData(undefined);
 | |
|                 onClear();
 | |
|                 self.Update();
 | |
|             });
 | |
| 
 | |
|     }
 | |
| 
 | |
| 
 | |
|     InnerRender(): string {
 | |
|         if (State.state.fullScreenMessage.data === undefined) {
 | |
|             return "";
 | |
|         }
 | |
|         return new Combine([this._uielement, this.returnToTheMap])
 | |
|             .Render();
 | |
|     }
 | |
| 
 | |
| 
 | |
| } |