forked from MapComplete/MapComplete
		
	Docs: improve documentation with quick overview table of the most important questions
This commit is contained in:
		
							parent
							
								
									4078b33a87
								
							
						
					
					
						commit
						aa5c309887
					
				
					 6 changed files with 78 additions and 20 deletions
				
			
		|  | @ -406,6 +406,7 @@ class LayerOverviewUtils extends Script { | ||||||
| 
 | 
 | ||||||
|         for (const tr of sharedQuestions.tagRenderings) { |         for (const tr of sharedQuestions.tagRenderings) { | ||||||
|             const tagRendering = <QuestionableTagRenderingConfigJson>tr |             const tagRendering = <QuestionableTagRenderingConfigJson>tr | ||||||
|  |             tagRendering._definedIn = ["questions", tr["id"]] | ||||||
|             dict.set(tagRendering["id"], tagRendering) |             dict.set(tagRendering["id"], tagRendering) | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -62,7 +62,7 @@ export class ExpandTagRendering extends Conversion< | ||||||
|         spec: string | { builtin: string | string[] } | TagRenderingConfigJson, |         spec: string | { builtin: string | string[] } | TagRenderingConfigJson, | ||||||
|         ctx: ConversionContext |         ctx: ConversionContext | ||||||
|     ): QuestionableTagRenderingConfigJson[] { |     ): QuestionableTagRenderingConfigJson[] { | ||||||
|         const trs = this.convertOnce(<any>spec, ctx)?.map((tr) => |         const trs = this.convertOnce(spec, ctx)?.map((tr) => | ||||||
|             this.pruneMappings<TagRenderingConfigJson & { id: string }>(tr, ctx) |             this.pruneMappings<TagRenderingConfigJson & { id: string }>(tr, ctx) | ||||||
|         ) |         ) | ||||||
|         if (!Array.isArray(trs)) { |         if (!Array.isArray(trs)) { | ||||||
|  | @ -231,6 +231,8 @@ export class ExpandTagRendering extends Conversion< | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |             found._definedIn = [layer.id, found.id] | ||||||
|  | 
 | ||||||
|             found = contextWriter.convertStrict( |             found = contextWriter.convertStrict( | ||||||
|                 found, |                 found, | ||||||
|                 ConversionContext.construct( |                 ConversionContext.construct( | ||||||
|  | @ -248,9 +250,9 @@ export class ExpandTagRendering extends Conversion< | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private convertOnce( |     private convertOnce( | ||||||
|         tr: string | { builtin: string } | TagRenderingConfigJson, |         tr: string | { builtin: string | string[] } | TagRenderingConfigJson, | ||||||
|         ctx: ConversionContext |         ctx: ConversionContext | ||||||
|     ): TagRenderingConfigJson[] { |     ): (TagRenderingConfigJson & { id: string })[] { | ||||||
|         const state = this._state |         const state = this._state | ||||||
| 
 | 
 | ||||||
|         if (tr === undefined) { |         if (tr === undefined) { | ||||||
|  |  | ||||||
|  | @ -1,18 +1,6 @@ | ||||||
| import { | import { Concat, DesugaringContext, DesugaringStep, Each, FirstOf, Fuse, On, SetDefault } from "./Conversion" | ||||||
|     Concat, |  | ||||||
|     DesugaringContext, |  | ||||||
|     DesugaringStep, |  | ||||||
|     Each, |  | ||||||
|     FirstOf, |  | ||||||
|     Fuse, |  | ||||||
|     On, |  | ||||||
|     SetDefault, |  | ||||||
| } from "./Conversion" |  | ||||||
| import { LayerConfigJson } from "../Json/LayerConfigJson" | import { LayerConfigJson } from "../Json/LayerConfigJson" | ||||||
| import { | import { MinimalTagRenderingConfigJson, TagRenderingConfigJson } from "../Json/TagRenderingConfigJson" | ||||||
|     MinimalTagRenderingConfigJson, |  | ||||||
|     TagRenderingConfigJson, |  | ||||||
| } from "../Json/TagRenderingConfigJson" |  | ||||||
| import { Utils } from "../../../Utils" | import { Utils } from "../../../Utils" | ||||||
| import RewritableConfigJson from "../Json/RewritableConfigJson" | import RewritableConfigJson from "../Json/RewritableConfigJson" | ||||||
| import SpecialVisualizations from "../../../UI/SpecialVisualizations" | import SpecialVisualizations from "../../../UI/SpecialVisualizations" | ||||||
|  | @ -265,6 +253,7 @@ export class AddQuestionBox extends DesugaringStep<LayerConfigJson> { | ||||||
|             seen.add("hidden") |             seen.add("hidden") | ||||||
|             const question: QuestionableTagRenderingConfigJson = { |             const question: QuestionableTagRenderingConfigJson = { | ||||||
|                 id: "leftover-questions", |                 id: "leftover-questions", | ||||||
|  |                 labels: ["ignore-docs", "added_by_default"], | ||||||
|                 render: { |                 render: { | ||||||
|                     "*": `{questions( ,${Array.from(seen).join(";")})}`, |                     "*": `{questions( ,${Array.from(seen).join(";")})}`, | ||||||
|                 }, |                 }, | ||||||
|  |  | ||||||
|  | @ -228,4 +228,10 @@ export interface TagRenderingConfigJson { | ||||||
|      * This tagRendering can introduce this builtin filter |      * This tagRendering can introduce this builtin filter | ||||||
|      */ |      */ | ||||||
|     filter?: string[] | true |     filter?: string[] | true | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Helper to indicate where the tagRendering was originally defined | ||||||
|  |      * group: hidden | ||||||
|  |      */ | ||||||
|  |     _definedIn?: [string, string] | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -376,6 +376,59 @@ export default class LayerConfig extends WithContextLoader { | ||||||
|         return this.mapRendering.some((r) => r.location.has("point")) |         return this.mapRendering.some((r) => r.location.has("point")) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * A quick overview table of all the elements in the popup-box | ||||||
|  |      * @private | ||||||
|  |      */ | ||||||
|  |     private generateDocumentationQuickTable(): string { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         return MarkdownUtils.table( | ||||||
|  |             ["id", "question", "labels", "freeform key"], | ||||||
|  |             this.tagRenderings | ||||||
|  |                 .filter(tr => tr.labels.indexOf("ignore_docs") < 0) | ||||||
|  |                 .map(tr => { | ||||||
|  | 
 | ||||||
|  |                     let key = "_Multiple choice only_" | ||||||
|  |                     if (tr.freeform) { | ||||||
|  |                         const type = `[${tr.freeform.type}](../SpecialInputElements.md#${tr.freeform.type})` | ||||||
|  | 
 | ||||||
|  |                         key = `*[${tr.freeform.key}](https://wiki.osm.org/wiki/Key:${tr.freeform.key})* (${type})` | ||||||
|  |                     } | ||||||
|  |                     let origDef = "" | ||||||
|  |                     if (tr._definedIn) { | ||||||
|  |                         let [layer, id] = tr._definedIn | ||||||
|  |                         if (layer == "questions") { | ||||||
|  |                             layer = "./BuiltinQuestions" | ||||||
|  |                         } else { | ||||||
|  |                             layer = "./" + layer | ||||||
|  |                         } | ||||||
|  |                         origDef = `<br/> _(Original in [${tr._definedIn[0]}](${layer}.md#${id}))_` | ||||||
|  |                     } | ||||||
|  |                     const q = tr.question?.Subs(this.baseTags)?.txt?.trim() | ||||||
|  |                     let r = tr.render?.txt | ||||||
|  |                     if (r && r !== "") { | ||||||
|  |                         r = `_${r}_` | ||||||
|  |                     } | ||||||
|  |                     let options: string = undefined | ||||||
|  |                     if (tr.mappings?.length > 0) { | ||||||
|  |                         options = `${tr.mappings.length} options` | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|  |                     return [ | ||||||
|  |                         `[${tr.id}](#${tr.id}) ${origDef}`, | ||||||
|  |                         Utils.NoNull([q, r, options]).join("<br/>"), | ||||||
|  |                         tr.labels.join(", "), | ||||||
|  |                         key | ||||||
|  | 
 | ||||||
|  |                     ] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |                 }) | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     public generateDocumentation( |     public generateDocumentation( | ||||||
|         usedInThemes: string[], |         usedInThemes: string[], | ||||||
|         layerIsNeededBy?: Map<string, string[]>, |         layerIsNeededBy?: Map<string, string[]>, | ||||||
|  | @ -530,8 +583,7 @@ export default class LayerConfig extends WithContextLoader { | ||||||
|         let quickOverview: string[] = [] |         let quickOverview: string[] = [] | ||||||
|         if (tableRows.length > 0) { |         if (tableRows.length > 0) { | ||||||
|             quickOverview = [ |             quickOverview = [ | ||||||
|                 "**Warning:**", |                 "**Warning:**: this quick overview is incomplete", | ||||||
|                 "this quick overview is incomplete", |  | ||||||
|                 MarkdownUtils.table( |                 MarkdownUtils.table( | ||||||
|                     ["attribute", "type", "values which are supported by this layer"], |                     ["attribute", "type", "values which are supported by this layer"], | ||||||
|                     tableRows |                     tableRows | ||||||
|  | @ -603,7 +655,9 @@ export default class LayerConfig extends WithContextLoader { | ||||||
|             ...presets, |             ...presets, | ||||||
|             ...tagsDescription, |             ...tagsDescription, | ||||||
|             "## Supported attributes", |             "## Supported attributes", | ||||||
|             quickOverview, |             ...quickOverview, | ||||||
|  |             "## Featureview elements and TagRenderings", | ||||||
|  |             this.generateDocumentationQuickTable(), | ||||||
|             ...this.tagRenderings |             ...this.tagRenderings | ||||||
|                 .filter((tr) => tr.labels.indexOf("ignore_docs") < 0) |                 .filter((tr) => tr.labels.indexOf("ignore_docs") < 0) | ||||||
|                 .map((tr) => tr.GenerateDocumentation()), |                 .map((tr) => tr.GenerateDocumentation()), | ||||||
|  |  | ||||||
|  | @ -60,6 +60,11 @@ export default class TagRenderingConfig { | ||||||
| 
 | 
 | ||||||
|     public readonly configuration_warnings: string[] = [] |     public readonly configuration_warnings: string[] = [] | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * States where this was originally defined, if imported | ||||||
|  |      */ | ||||||
|  |     public readonly _definedIn: [string, string] = undefined | ||||||
|  | 
 | ||||||
|     public readonly freeform?: { |     public readonly freeform?: { | ||||||
|         readonly key: string |         readonly key: string | ||||||
|         readonly type: ValidatorType |         readonly type: ValidatorType | ||||||
|  | @ -147,6 +152,7 @@ export default class TagRenderingConfig { | ||||||
|         this.questionHintIsMd = json["questionHintIsMd"] ?? false |         this.questionHintIsMd = json["questionHintIsMd"] ?? false | ||||||
|         this.alwaysForceSaveButton = json["#force-save-button"] === "yes" |         this.alwaysForceSaveButton = json["#force-save-button"] === "yes" | ||||||
|         this.description = Translations.T(json.description, translationKey + ".description") |         this.description = Translations.T(json.description, translationKey + ".description") | ||||||
|  |         this._definedIn = json._definedIn | ||||||
|         if (json.onSoftDelete && !Array.isArray(json.onSoftDelete)) { |         if (json.onSoftDelete && !Array.isArray(json.onSoftDelete)) { | ||||||
|             throw context + ".onSoftDelete Not an array: " + typeof json.onSoftDelete |             throw context + ".onSoftDelete Not an array: " + typeof json.onSoftDelete | ||||||
|         } |         } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue