2020-09-03 16:44:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { UIElement }  from  "../UIElement" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { OsmConnection ,  UserDetails }  from  "../../Logic/Osm/OsmConnection" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { UIEventSource }  from  "../../Logic/UIEventSource" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  SingleSetting  from  "./SingleSetting" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  GeneralSettings  from  "./GeneralSettings" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  Combine  from  "../Base/Combine" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { VariableUiElement }  from  "../Base/VariableUIElement" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { TabbedComponent }  from  "../Base/TabbedComponent" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  PageSplit  from  "../Base/PageSplit" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  AllLayersPanel  from  "./AllLayersPanel" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  SharePanel  from  "./SharePanel" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { LayoutConfigJson }  from  "../../Customizations/JSON/LayoutConfigJson" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { SubtleButton }  from  "../Base/SubtleButton" ;  
						 
					
						
							
								
									
										
										
										
											2020-10-02 19:00:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  State  from  "../../State" ;  
						 
					
						
							
								
									
										
										
										
											2020-09-03 16:44:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { FixedUiElement }  from  "../Base/FixedUiElement" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  SavePanel  from  "./SavePanel" ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { LocalStorageSource }  from  "../../Logic/Web/LocalStorageSource" ;  
						 
					
						
							
								
									
										
										
										
											2020-09-17 14:24:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  HelpText  from  "./HelpText" ;  
						 
					
						
							
								
									
										
										
										
											2020-11-06 04:02:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  Svg  from  "../../Svg" ;  
						 
					
						
							
								
									
										
										
										
											2020-09-03 16:44:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  default  class  CustomGeneratorPanel  extends  UIElement  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    private  mainPanel : UIElement ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    private  loginButton : UIElement ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-03 19:05:18 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    private  readonly  connection : OsmConnection ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-03 16:44:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    constructor ( connection : OsmConnection ,  layout : LayoutConfigJson )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        super ( connection . userDetails ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this . connection  =  connection ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this . SetClass ( "main-tabs" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this . loginButton  =  new  SubtleButton ( "" ,  "Login to create a custom theme" ) . onClick ( ( )  = >  connection . AttemptLogin ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  self  =  this ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . mainPanel  =  new  FixedUiElement ( "Attempting to log in..." ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        connection . OnLoggedIn ( userDetails  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            self . InitMainPanel ( layout ,  userDetails ,  connection ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            self . Update ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    private  InitMainPanel ( layout : LayoutConfigJson ,  userDetails : UserDetails ,  connection : OsmConnection )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  es  =  new  UIEventSource ( layout ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  encoded  =  es . map ( config  = >  btoa ( JSON . stringify ( config ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-03 19:05:18 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        encoded . addCallback ( encoded  = >  LocalStorageSource . Get ( "last-custom-theme" ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-03 16:44:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        const  liveUrl  =  encoded . map ( encoded  = >  ` ./index.html?userlayout= ${ es . data . id } # ${ encoded } ` ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-17 13:13:02 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        const  testUrl  =  encoded . map ( encoded  = >  ` ./index.html?test=true&userlayout= ${ es . data . id } # ${ encoded } ` ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  iframe  =  testUrl . map ( url  = >  ` <iframe src=' ${ url } ' width='100%' height='99%' style="box-sizing: border-box" title='Theme Preview'></iframe> ` ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-03 16:44:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        const  currentSetting  =  new  UIEventSource < SingleSetting < any > > ( undefined ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  generalSettings  =  new  GeneralSettings ( es ,  currentSetting ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  languages  =  generalSettings . languages ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  chronic  =  UIEventSource . Chronic ( 120  *  1000 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            . map ( date  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( es . data . id  ==  undefined )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    return  undefined 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( es . data . id  ===  "" )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    return  undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                const  pref  =  connection . GetLongPreference ( "installed-theme-"  +  es . data . id ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                pref . setData ( encoded . data ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  date ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  preview  =  new  Combine ( [ 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-07 02:47:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            new  VariableUiElement ( iframe ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-03 16:44:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ] ) . SetClass ( "preview" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        this . mainPanel  =  new  TabbedComponent ( [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-06 04:02:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                header : Svg.gear_img , 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-03 16:44:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                content : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    new  PageSplit ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        generalSettings . SetStyle ( "width: 50vw;" ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        new  Combine ( [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            new  HelpText ( currentSetting ) . SetStyle ( "height:calc(100% - 65vh); width: 100%; display:block; overflow-y: auto" ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            preview . SetStyle ( "height:65vh; width:100%; display:block" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        ] ) . SetStyle ( "position:relative; width: 50%;" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-06 04:02:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                header : Svg.layers_img , 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-03 16:44:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                content : new  AllLayersPanel ( es ,  languages ,  userDetails ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-06 04:02:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                header : Svg.floppy_img , 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-03 16:44:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                content : new  SavePanel ( this . connection ,  es ,  chronic ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-06 04:02:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                header :Svg.share_img , 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-07 02:25:45 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                content : new  SharePanel ( es ,  liveUrl ,  userDetails ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-03 16:44:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    InnerRender ( ) :  string  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  ud  =  this . connection . userDetails . data ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! ud . loggedIn )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  new  Combine ( [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                "<h3>Not Logged in</h3>" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                "You need to be logged in in order to create a custom theme" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                this . loginButton 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ] ) . Render ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ud . csCount  <=  State . userJourney . themeGeneratorReadOnlyUnlock )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  new  Combine ( [ 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-15 15:33:18 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                "<h3>Too little experience</h3>" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ` <p>Creating your own (readonly) themes can only be done if you have more then <b> ${ State . userJourney . themeGeneratorReadOnlyUnlock } </b> changesets made</p> ` , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ` <p>Making a theme including survey options can be done at <b> ${ State . userJourney . themeGeneratorFullUnlock } </b> changesets</p> ` 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-03 16:44:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ] ) . Render ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  this . mainPanel . Render ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}