| 
									
										
										
										
											2021-03-24 02:01:04 +01:00
										 |  |  | import Combine from "../UI/Base/Combine" | 
					
						
							| 
									
										
										
										
											2021-06-15 00:28:59 +02:00
										 |  |  | import BaseUIElement from "../UI/BaseUIElement" | 
					
						
							|  |  |  | import Translations from "../UI/i18n/Translations" | 
					
						
							| 
									
										
										
										
											2022-07-16 03:57:13 +02:00
										 |  |  | import { existsSync, mkdirSync, writeFileSync } from "fs" | 
					
						
							| 
									
										
										
										
											2021-11-08 02:36:01 +01:00
										 |  |  | import { AllKnownLayouts } from "../Customizations/AllKnownLayouts" | 
					
						
							| 
									
										
										
										
											2021-11-30 22:50:48 +01:00
										 |  |  | import TableOfContents from "../UI/Base/TableOfContents" | 
					
						
							| 
									
										
										
										
											2022-07-16 03:57:13 +02:00
										 |  |  | import SimpleMetaTaggers from "../Logic/SimpleMetaTagger" | 
					
						
							| 
									
										
										
										
											2022-01-14 19:34:00 +01:00
										 |  |  | import ValidatedTextField from "../UI/Input/ValidatedTextField" | 
					
						
							|  |  |  | import SpecialVisualizations from "../UI/SpecialVisualizations" | 
					
						
							|  |  |  | import { ExtraFunctions } from "../Logic/ExtraFunctions" | 
					
						
							| 
									
										
										
										
											2021-11-30 22:50:48 +01:00
										 |  |  | import Title from "../UI/Base/Title" | 
					
						
							| 
									
										
										
										
											2022-01-14 19:34:00 +01:00
										 |  |  | import Minimap from "../UI/Base/Minimap" | 
					
						
							| 
									
										
										
										
											2021-11-30 22:50:48 +01:00
										 |  |  | import QueryParameterDocumentation from "../UI/QueryParameterDocumentation" | 
					
						
							| 
									
										
										
										
											2022-01-29 02:45:59 +01:00
										 |  |  | import ScriptUtils from "./ScriptUtils" | 
					
						
							|  |  |  | import List from "../UI/Base/List" | 
					
						
							| 
									
										
										
										
											2022-02-14 23:42:32 +01:00
										 |  |  | import SharedTagRenderings from "../Customizations/SharedTagRenderings" | 
					
						
							| 
									
										
										
										
											2022-02-15 00:11:11 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-06 16:12:01 +02:00
										 |  |  | function WriteFile( | 
					
						
							|  |  |  |     filename, | 
					
						
							|  |  |  |     html: BaseUIElement, | 
					
						
							|  |  |  |     autogenSource: string[], | 
					
						
							|  |  |  |     options?: { | 
					
						
							|  |  |  |         noTableOfContents: boolean | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | ): void { | 
					
						
							| 
									
										
										
										
											2022-02-15 00:11:11 +01:00
										 |  |  |     for (const source of autogenSource) { | 
					
						
							|  |  |  |         if (source.indexOf("*") > 0) { | 
					
						
							|  |  |  |             continue | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if (!existsSync(source)) { | 
					
						
							|  |  |  |             throw ( | 
					
						
							|  |  |  |                 "While creating a documentation file and checking that the generation sources are properly linked: source file " + | 
					
						
							|  |  |  |                 source + | 
					
						
							|  |  |  |                 " was not found. Typo?" | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |             ) | 
					
						
							| 
									
										
										
										
											2022-02-15 00:11:11 +01:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-06 16:12:01 +02:00
										 |  |  |     if (html instanceof Combine && !options?.noTableOfContents) { | 
					
						
							| 
									
										
										
										
											2021-11-30 22:50:48 +01:00
										 |  |  |         const toc = new TableOfContents(html) | 
					
						
							|  |  |  |         const els = html.getElements() | 
					
						
							| 
									
										
										
										
											2022-01-14 19:34:00 +01:00
										 |  |  |         html = new Combine([els.shift(), toc, ...els]).SetClass("flex flex-col") | 
					
						
							| 
									
										
										
										
											2021-11-30 22:50:48 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-14 19:34:00 +01:00
										 |  |  |     let md = new Combine([ | 
					
						
							|  |  |  |         Translations.W(html), | 
					
						
							| 
									
										
										
										
											2022-02-15 00:00:30 +01:00
										 |  |  |         "\n\nThis document is autogenerated from " + | 
					
						
							|  |  |  |             autogenSource | 
					
						
							|  |  |  |                 .map( | 
					
						
							|  |  |  |                     (file) => | 
					
						
							|  |  |  |                         `[${file}](https://github.com/pietervdvn/MapComplete/blob/develop/${file})` | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                 ) | 
					
						
							| 
									
										
										
										
											2022-02-15 00:00:30 +01:00
										 |  |  |                 .join(", "), | 
					
						
							| 
									
										
										
										
											2022-01-14 19:34:00 +01:00
										 |  |  |     ]).AsMarkdown() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     md.replace(/\n\n\n+/g, "\n\n") | 
					
						
							| 
									
										
										
										
											2022-01-26 21:40:38 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-14 19:34:00 +01:00
										 |  |  |     writeFileSync(filename, md) | 
					
						
							| 
									
										
										
										
											2021-06-15 00:28:59 +02:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2021-03-13 19:07:11 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-14 19:34:00 +01:00
										 |  |  | console.log("Starting documentation generation...") | 
					
						
							| 
									
										
										
										
											2022-04-06 16:12:01 +02:00
										 |  |  | AllKnownLayouts.GenOverviewsForSingleLayer((layer, element, inlineSource) => { | 
					
						
							| 
									
										
										
										
											2022-01-14 19:34:00 +01:00
										 |  |  |     console.log("Exporting ", layer.id) | 
					
						
							| 
									
										
										
										
											2022-04-06 16:12:01 +02:00
										 |  |  |     if (!existsSync("./Docs/Layers")) { | 
					
						
							|  |  |  |         mkdirSync("./Docs/Layers") | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     let source: string = `assets/layers/${layer.id}/${layer.id}.json` | 
					
						
							|  |  |  |     if (inlineSource !== undefined) { | 
					
						
							|  |  |  |         source = `assets/themes/${inlineSource}/${inlineSource}.json` | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     WriteFile("./Docs/Layers/" + layer.id + ".md", element, [source], { noTableOfContents: true }) | 
					
						
							| 
									
										
										
										
											2022-01-14 19:34:00 +01:00
										 |  |  | }) | 
					
						
							| 
									
										
										
										
											2022-02-15 00:11:11 +01:00
										 |  |  | WriteFile("./Docs/SpecialRenderings.md", SpecialVisualizations.HelpMessage(), [ | 
					
						
							|  |  |  |     "UI/SpecialVisualizations.ts", | 
					
						
							|  |  |  | ]) | 
					
						
							| 
									
										
										
										
											2022-01-14 19:34:00 +01:00
										 |  |  | WriteFile( | 
					
						
							|  |  |  |     "./Docs/CalculatedTags.md", | 
					
						
							|  |  |  |     new Combine([ | 
					
						
							|  |  |  |         new Title("Metatags", 1), | 
					
						
							|  |  |  |         SimpleMetaTaggers.HelpText(), | 
					
						
							|  |  |  |         ExtraFunctions.HelpText(), | 
					
						
							|  |  |  |     ]).SetClass("flex-col"), | 
					
						
							| 
									
										
										
										
											2022-02-15 00:11:11 +01:00
										 |  |  |     ["Logic/SimpleMetaTagger.ts", "Logic/ExtraFunctions.ts"] | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | WriteFile("./Docs/SpecialInputElements.md", ValidatedTextField.HelpText(), [ | 
					
						
							|  |  |  |     "UI/Input/ValidatedTextField.ts", | 
					
						
							|  |  |  | ]) | 
					
						
							|  |  |  | WriteFile("./Docs/BuiltinLayers.md", AllKnownLayouts.GenLayerOverviewText(), [ | 
					
						
							|  |  |  |     "Customizations/AllKnownLayouts.ts", | 
					
						
							|  |  |  | ]) | 
					
						
							|  |  |  | WriteFile("./Docs/BuiltinQuestions.md", SharedTagRenderings.HelpText(), [ | 
					
						
							|  |  |  |     "Customizations/SharedTagRenderings.ts", | 
					
						
							|  |  |  |     "assets/tagRenderings/questions.json", | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | ]) | 
					
						
							| 
									
										
										
										
											2022-01-14 19:34:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-29 02:45:59 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2022-02-04 01:05:35 +01:00
										 |  |  |     // Generate the builtinIndex which shows interlayer dependencies
 | 
					
						
							| 
									
										
										
										
											2022-01-29 02:45:59 +01:00
										 |  |  |     var layers = ScriptUtils.getLayerFiles().map((f) => f.parsed) | 
					
						
							|  |  |  |     var builtinsPerLayer = new Map<string, string[]>() | 
					
						
							|  |  |  |     var layersUsingBuiltin = new Map<string /* Builtin */, string[]>() | 
					
						
							|  |  |  |     for (const layer of layers) { | 
					
						
							|  |  |  |         if (layer.tagRenderings === undefined) { | 
					
						
							|  |  |  |             continue | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         const usedBuiltins: string[] = [] | 
					
						
							|  |  |  |         for (const tagRendering of layer.tagRenderings) { | 
					
						
							|  |  |  |             if (typeof tagRendering === "string") { | 
					
						
							|  |  |  |                 usedBuiltins.push(tagRendering) | 
					
						
							|  |  |  |                 continue | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             if (tagRendering["builtin"] !== undefined) { | 
					
						
							|  |  |  |                 const builtins = tagRendering["builtin"] | 
					
						
							|  |  |  |                 if (typeof builtins === "string") { | 
					
						
							|  |  |  |                     usedBuiltins.push(builtins) | 
					
						
							|  |  |  |                 } else { | 
					
						
							|  |  |  |                     usedBuiltins.push(...builtins) | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         for (const usedBuiltin of usedBuiltins) { | 
					
						
							|  |  |  |             var using = layersUsingBuiltin.get(usedBuiltin) | 
					
						
							|  |  |  |             if (using === undefined) { | 
					
						
							|  |  |  |                 layersUsingBuiltin.set(usedBuiltin, [layer.id]) | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 using.push(layer.id) | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-29 02:45:59 +01:00
										 |  |  |         builtinsPerLayer.set(layer.id, usedBuiltins) | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-29 02:45:59 +01:00
										 |  |  |     const docs = new Combine([ | 
					
						
							|  |  |  |         new Title("Index of builtin TagRendering", 1), | 
					
						
							|  |  |  |         new Title("Existing builtin tagrenderings", 2), | 
					
						
							|  |  |  |         ...Array.from(layersUsingBuiltin.entries()).map(([builtin, usedByLayers]) => | 
					
						
							|  |  |  |             new Combine([new Title(builtin), new List(usedByLayers)]).SetClass("flex flex-col") | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |     ]).SetClass("flex flex-col") | 
					
						
							|  |  |  |     WriteFile("./Docs/BuiltinIndex.md", docs, ["assets/layers/*.json"]) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2022-01-14 19:34:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-28 03:21:17 +02:00
										 |  |  | Minimap.createMiniMap = (_) => { | 
					
						
							|  |  |  |     console.log("Not creating a minimap, it is disabled") | 
					
						
							|  |  |  |     return undefined | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-15 00:11:11 +01:00
										 |  |  | WriteFile("./Docs/URL_Parameters.md", QueryParameterDocumentation.GenerateQueryParameterDocs(), [ | 
					
						
							|  |  |  |     "Logic/Web/QueryParameters.ts", | 
					
						
							|  |  |  |     "UI/QueryParameterDocumentation.ts", | 
					
						
							|  |  |  | ]) | 
					
						
							| 
									
										
										
										
											2021-03-22 01:06:24 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | console.log("Generated docs") |