2020-11-11 16:23:49 +01:00
import { Translation } from "../../UI/i18n/Translation" ;
import TagRenderingConfig from "./TagRenderingConfig" ;
import LayerConfig from "./LayerConfig" ;
import { LayoutConfigJson } from "./LayoutConfigJson" ;
import SharedLayers from "../SharedLayers" ;
import SharedTagRenderings from "../SharedTagRenderings" ;
export default class LayoutConfig {
public readonly id : string ;
public readonly maintainer : string ;
public readonly changesetmessage? : string ;
public readonly version : string ;
public readonly language : string [ ] ;
public readonly title : Translation ;
public readonly shortDescription? : Translation ;
public readonly description : Translation ;
public readonly descriptionTail? : Translation ;
public readonly icon : string ;
public readonly socialImage? : string ;
public readonly startZoom : number ;
public readonly startLat : number ;
public readonly startLon : number ;
public readonly widenFactor : number ;
public readonly roamingRenderings : TagRenderingConfig [ ] ;
public readonly defaultBackgroundId? : string ;
public readonly layers : LayerConfig [ ] ;
2021-01-04 20:09:07 +01:00
public readonly clustering ? : {
maxZoom : number
} ;
2021-01-04 18:55:10 +01:00
2020-11-11 16:23:49 +01:00
public readonly hideFromOverview : boolean ;
public readonly enableUserBadge : boolean ;
public readonly enableShareScreen : boolean ;
public readonly enableMoreQuests : boolean ;
public readonly enableAddNewPoints : boolean ;
public readonly enableLayers : boolean ;
public readonly enableSearch : boolean ;
public readonly enableGeolocation : boolean ;
2021-01-04 18:55:10 +01:00
public readonly enableBackgroundLayerSelection : boolean ;
2020-11-11 16:23:49 +01:00
public readonly customCss? : string ;
2021-01-04 18:55:10 +01:00
constructor ( json : LayoutConfigJson , context? : string ) {
2020-11-11 16:23:49 +01:00
this . id = json . id ;
2021-01-04 18:55:10 +01:00
context = ( context ? ? "" ) + "." + this . id ;
2020-11-11 16:23:49 +01:00
this . maintainer = json . maintainer ;
this . changesetmessage = json . changesetmessage ;
this . version = json . version ;
this . language = [ ] ;
if ( typeof json . language === "string" ) {
this . language = [ json . language ] ;
} else {
this . language = json . language ;
}
2021-01-04 18:55:10 +01:00
if ( json . title === undefined ) {
throw "Title not defined in " + this . id ;
2020-11-11 16:23:49 +01:00
}
2021-01-04 18:55:10 +01:00
if ( json . description === undefined ) {
throw "Description not defined in " + this . id ;
2020-11-11 16:23:49 +01:00
}
2021-01-04 18:55:10 +01:00
this . title = new Translation ( json . title , context + ".title" ) ;
this . description = new Translation ( json . description , context + ".description" ) ;
this . shortDescription = json . shortDescription === undefined ? this . description . FirstSentence ( ) : new Translation ( json . shortDescription , context + ".shortdescription" ) ;
this . descriptionTail = json . descriptionTail === undefined ? new Translation ( { "*" : "" } , context ) : new Translation ( json . descriptionTail , context + ".descriptionTail" ) ;
2020-11-11 16:23:49 +01:00
this . icon = json . icon ;
this . socialImage = json . socialImage ;
this . startZoom = json . startZoom ;
this . startLat = json . startLat ;
this . startLon = json . startLon ;
this . widenFactor = json . widenFactor ? ? 0.05 ;
this . roamingRenderings = ( json . roamingRenderings ? ? [ ] ) . map ( ( tr , i ) = > {
if ( typeof tr === "string" ) {
if ( SharedTagRenderings . SharedTagRendering [ tr ] !== undefined ) {
return SharedTagRenderings . SharedTagRendering [ tr ] ;
}
}
return new TagRenderingConfig ( tr , ` ${ this . id } .roaming_renderings[ ${ i } ] ` ) ;
}
) ;
this . defaultBackgroundId = json . defaultBackgroundId ;
this . layers = json . layers . map ( ( layer , i ) = > {
2021-01-04 20:09:07 +01:00
if ( typeof layer === "string" ) {
2020-11-11 16:23:49 +01:00
if ( SharedLayers . sharedLayers [ layer ] !== undefined ) {
return SharedLayers . sharedLayers [ layer ] ;
} else {
throw "Unkown fixed layer " + layer ;
}
2021-01-04 20:09:07 +01:00
}
2021-01-04 18:55:10 +01:00
return new LayerConfig ( layer , this . roamingRenderings , ` ${ this . id } .layers[ ${ i } ] ` ) ;
2020-11-11 16:23:49 +01:00
} ) ;
2021-01-04 18:55:10 +01:00
2021-01-04 20:09:07 +01:00
this . clustering = undefined ;
if ( json . clustering ) {
this . clustering = {
maxZoom : json.clustering.maxZoom ? ? 18
}
}
2021-01-04 18:55:10 +01:00
if ( this . clustering ) {
for ( const layer of this . layers ) {
if ( layer . wayHandling !== LayerConfig . WAYHANDLING_CENTER_ONLY ) {
2021-01-04 20:09:07 +01:00
console . error ( "WARNING: In order to allow clustering, every layer must be set to CENTER_ONLY. Layer" , layer . id , "does not respect this for layout" , this . id ) ;
2021-01-04 18:55:10 +01:00
}
}
}
2020-11-11 16:23:49 +01:00
this . hideFromOverview = json . hideFromOverview ? ? false ;
this . enableUserBadge = json . enableUserBadge ? ? true ;
this . enableShareScreen = json . enableShareScreen ? ? true ;
this . enableMoreQuests = json . enableMoreQuests ? ? true ;
this . enableLayers = json . enableLayers ? ? true ;
this . enableSearch = json . enableSearch ? ? true ;
this . enableGeolocation = json . enableGeolocation ? ? true ;
this . enableAddNewPoints = json . enableAddNewPoints ? ? true ;
this . enableBackgroundLayerSelection = json . enableBackgroundLayerSelection ? ? true ;
this . customCss = json . customCss ;
}
}