2020-08-17 17:23:15 +02:00
import { LayoutConfigJson } from "../../Customizations/JSON/CustomLayoutFromJSON" ;
import { UIEventSource } from "../../Logic/UIEventSource" ;
import { UIElement } from "../UIElement" ;
import Combine from "../Base/Combine" ;
2020-08-22 02:12:46 +02:00
import { Button } from "../Base/Button" ;
import { VariableUiElement } from "../Base/VariableUIElement" ;
2020-08-17 17:23:15 +02:00
export class Preview extends UIElement {
private url : UIEventSource < string > ;
private config : UIEventSource < LayoutConfigJson > ;
2020-08-22 02:12:46 +02:00
private currentPreview = new UIEventSource < string > ( "" )
private reloadButton : Button ;
private otherPreviews : VariableUiElement ;
2020-08-17 17:23:15 +02:00
constructor ( url : UIEventSource < string > , config : UIEventSource < LayoutConfigJson > ) {
2020-08-22 02:12:46 +02:00
super ( undefined ) ;
2020-08-17 17:23:15 +02:00
this . config = config ;
this . url = url ;
2020-08-22 02:12:46 +02:00
this . reloadButton = new Button ( "Reload the preview" , ( ) = > {
this . currentPreview . setData ( ` <iframe width="99%" height="70%" src=" ${ this . url . data } "></iframe> ` +
'<p class="alert">The above preview is in testmode. Changes will not be sent to OSM, so feel free to add points and answer questions</p> ' ,
) ;
} ) ;
this . ListenTo ( this . currentPreview ) ;
this . otherPreviews = new VariableUiElement ( this . url . map ( url = > {
return [
` <h2>Your link</h2> ` ,
'<span class="alert">Bookmark the link below</span><br/>' ,
'MapComplete has no backend. The <i>entire</i> theme configuration is saved in the following URL. This means that this URL is needed to revive and change your MapComplete instance.<br/>' ,
` <a target='_blank' href=' ${ this . url . data } '> ${ this . url . data } </a><br/> ` ,
'<h2>JSON-configuration</h2>' ,
'You can see the configuration in JSON format below.<br/>' ,
'<span class=\'literal-code iframe-code-block\' style="width:95%">' ,
JSON . stringify ( this . config . data , null , 2 ) . replace ( /\n/g , "<br/>" ) . replace ( / /g , " " ) ,
'</span>'
] . join ( "" )
} ) ) ;
2020-08-17 17:23:15 +02:00
}
InnerRender ( ) : string {
const url = this . url . data ;
return new Combine ( [
2020-08-22 02:12:46 +02:00
new VariableUiElement ( this . currentPreview ) ,
this . reloadButton ,
this . otherPreviews
2020-08-17 17:23:15 +02:00
] ) . Render ( ) ;
}
}