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();
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
} |