forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			52 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import known_themes from "../assets/generated/known_themes.json"
 | |
| import LayoutConfig from "../Models/ThemeConfig/LayoutConfig"
 | |
| import { LayoutConfigJson } from "../Models/ThemeConfig/Json/LayoutConfigJson"
 | |
| 
 | |
| /**
 | |
|  * Somewhat of a dictionary, which lazily parses needed themes
 | |
|  */
 | |
| export class AllKnownLayoutsLazy {
 | |
|     private readonly dict: Map<string, { data: LayoutConfig } | { func: () => LayoutConfig }> =
 | |
|         new Map()
 | |
|     constructor() {
 | |
|         for (const layoutConfigJson of known_themes["themes"]) {
 | |
|             this.dict.set(layoutConfigJson.id, {
 | |
|                 func: () => {
 | |
|                     const layout = new LayoutConfig(<LayoutConfigJson>layoutConfigJson, true)
 | |
|                     for (let i = 0; i < layout.layers.length; i++) {
 | |
|                         let layer = layout.layers[i]
 | |
|                         if (typeof layer === "string") {
 | |
|                             throw "Layer " + layer + " was not expanded in " + layout.id
 | |
|                         }
 | |
|                     }
 | |
|                     return layout
 | |
|                 },
 | |
|             })
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public get(key: string): LayoutConfig {
 | |
|         const thunk = this.dict.get(key)
 | |
|         if (thunk === undefined) {
 | |
|             return undefined
 | |
|         }
 | |
|         if (thunk["data"]) {
 | |
|             return thunk["data"]
 | |
|         }
 | |
|         const layout = thunk["func"]()
 | |
|         this.dict.set(key, { data: layout })
 | |
|         return layout
 | |
|     }
 | |
| 
 | |
|     public keys() {
 | |
|         return this.dict.keys()
 | |
|     }
 | |
| 
 | |
|     public values() {
 | |
|         return Array.from(this.keys()).map((k) => this.get(k))
 | |
|     }
 | |
| }
 | |
| 
 | |
| export class AllKnownLayouts {
 | |
|     public static allKnownLayouts: AllKnownLayoutsLazy = new AllKnownLayoutsLazy()
 | |
| }
 |