forked from MapComplete/MapComplete
Studio: WIP
This commit is contained in:
parent
04ecdad1bb
commit
903e168a89
62 changed files with 19152 additions and 123399 deletions
|
@ -1,21 +1,27 @@
|
|||
import { TagConfigJson } from "./TagConfigJson"
|
||||
import { TagRenderingConfigJson } from "./TagRenderingConfigJson"
|
||||
import { Translatable } from "./Translatable"
|
||||
|
||||
export interface MappingConfigJson {
|
||||
/**
|
||||
* quesiton: What tags should be matched to show this option?
|
||||
* question: What tags should be matched to show this option?
|
||||
*
|
||||
* If in 'question'-mode and the contributor selects this option, these tags will be applied to the object
|
||||
*/
|
||||
if: TagConfigJson
|
||||
|
||||
/**
|
||||
* Shown if the 'if is fulfilled
|
||||
* Question: What corresponding text should be shown?
|
||||
* Shown if the `if` is fulfilled
|
||||
* Type: rendered
|
||||
*/
|
||||
then: string | Record<string, string>
|
||||
/**
|
||||
* An extra icon supporting the choice
|
||||
* question: What icon should be shown next to this mapping?
|
||||
*
|
||||
* This icon will only be shown if the value is known, it is not displayed in the options (but might be in the future)
|
||||
*
|
||||
* ifunset: Show no icon
|
||||
* Type: icon
|
||||
*/
|
||||
icon?:
|
||||
|
@ -33,6 +39,11 @@ export interface MappingConfigJson {
|
|||
}
|
||||
|
||||
/**
|
||||
* question: Under what circumstances should this mapping be <b>hidden</b> from the possibilities a contributor can pick?
|
||||
* iftrue: Never show this mapping as option to pick
|
||||
* ifunset: Always show this mapping as option to pick
|
||||
* type: tag
|
||||
*
|
||||
* In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).
|
||||
*
|
||||
* In the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.
|
||||
|
@ -93,7 +104,10 @@ export interface MappingConfigJson {
|
|||
* }
|
||||
*/
|
||||
hideInAnswer?: boolean | TagConfigJson
|
||||
|
||||
/**
|
||||
* question: What tags should be applied if this mapping is _not_ chosen?
|
||||
*
|
||||
* Only applicable if 'multiAnswer' is set.
|
||||
* This is for situations such as:
|
||||
* `accepts:coins=no` where one can select all the possible payment methods. However, we want to make explicit that some options _were not_ selected.
|
||||
|
@ -104,7 +118,10 @@ export interface MappingConfigJson {
|
|||
ifnot?: TagConfigJson
|
||||
|
||||
/**
|
||||
* If chosen as answer, these tags will be applied as well onto the object.
|
||||
* question: What extra tags should be added to the object if this object is chosen?
|
||||
* type: simple_tag[]
|
||||
*
|
||||
* If chosen as answer, these tags will be applied onto the object, together with the tags from the `if`
|
||||
* Not compatible with multiAnswer.
|
||||
*
|
||||
* This can be used e.g. to erase other keys which indicate the 'not' value:
|
||||
|
@ -120,21 +137,25 @@ export interface MappingConfigJson {
|
|||
addExtraTags?: string[]
|
||||
|
||||
/**
|
||||
* question: If there are many options, what search terms match too?
|
||||
* If there are many options, the mappings-radiobuttons will be replaced by an element with a searchfunction
|
||||
*
|
||||
* Searchterms (per language) allow to easily find an option if there are many options
|
||||
* group: hidden
|
||||
*/
|
||||
searchTerms?: Record<string, string[]>
|
||||
|
||||
/**
|
||||
* If the searchable selector is picked, mappings with this item will have priority and show up even if the others are hidden
|
||||
* Use this sparingly
|
||||
* group: hidden
|
||||
*/
|
||||
priorityIf?: TagConfigJson
|
||||
|
||||
/**
|
||||
* Used for comments or to disable a validation
|
||||
*
|
||||
* group: hidden
|
||||
* ignore-image-in-then: normally, a `then`-clause is not allowed to have an `img`-html-element as icons are preferred. In some cases (most notably title-icons), this is allowed
|
||||
*/
|
||||
"#"?: string | "ignore-image-in-then"
|
||||
|
@ -145,7 +166,7 @@ export interface MappingConfigJson {
|
|||
* If the desired tags are missing and a question is defined, a question will be shown instead.
|
||||
*/
|
||||
export interface QuestionableTagRenderingConfigJson extends TagRenderingConfigJson {
|
||||
/**
|
||||
/*
|
||||
* The id of the tagrendering, should be an unique string.
|
||||
* Used to keep the translations in sync. Only used in the tagRenderings-array of a layerConfig, not requered otherwise.
|
||||
*
|
||||
|
@ -176,7 +197,8 @@ export interface QuestionableTagRenderingConfigJson extends TagRenderingConfigJs
|
|||
*/
|
||||
freeform?: {
|
||||
/**
|
||||
* @inheritDoc
|
||||
* question What is the name of the attribute that should be written to?
|
||||
* ifunset: do not offer a freeform textfield as answer option
|
||||
*/
|
||||
key: string
|
||||
|
||||
|
@ -184,6 +206,7 @@ export interface QuestionableTagRenderingConfigJson extends TagRenderingConfigJs
|
|||
* question: What is the input type?
|
||||
* The type of the text-field, e.g. 'string', 'nat', 'float', 'date',...
|
||||
* See Docs/SpecialInputElements.md and UI/Input/ValidatedTextField.ts for supported values
|
||||
* suggestions: return validators.AllValidators.filter(type => !type.isMeta).map((type) => ({if: "value="+type.name, then: "<b>"+type.name+"</b> "+type.explanation.split("\n")[0]}))
|
||||
*/
|
||||
type?: string
|
||||
/**
|
||||
|
@ -203,11 +226,12 @@ export interface QuestionableTagRenderingConfigJson extends TagRenderingConfigJs
|
|||
addExtraTags?: string[]
|
||||
|
||||
/**
|
||||
* When set, influences the way a question is asked.
|
||||
* question: Show the freeform as box within the question?
|
||||
* Instead of showing a full-width text field, the text field will be shown within the rendering of the question.
|
||||
*
|
||||
* This combines badly with special input elements, as it'll distort the layout.
|
||||
* Note that this will be set automatically if no special elements are present.
|
||||
* ifunset: show the freeform input field full-width
|
||||
* iftrue: show the freeform input field as a small field within the question
|
||||
*/
|
||||
inline?: boolean
|
||||
|
||||
|
@ -219,16 +243,21 @@ export interface QuestionableTagRenderingConfigJson extends TagRenderingConfigJs
|
|||
}
|
||||
|
||||
/**
|
||||
* If it turns out that this tagRendering doesn't match _any_ value, then we show this question.
|
||||
* If undefined, the question is never asked and this tagrendering is read-only
|
||||
* question: What question should be shown to the contributor?
|
||||
*
|
||||
* A question is presented ot the user if no mapping matches and the 'freeform' key is not set as well.
|
||||
*
|
||||
* ifunset: This tagrendering will be shown if it is known, but cannot be edited by the contributor, effectively resutling in a read-only rendering
|
||||
*/
|
||||
question?: string | Record<string, string>
|
||||
question?: string | Translatable
|
||||
|
||||
/**
|
||||
* A hint which is shown in subtle text under the question.
|
||||
* question: Should some extra information be shown to the contributor, alongside the question?
|
||||
* This hint is shown in subtle text under the question.
|
||||
* This can give some extra information on what the answer should ook like
|
||||
* ifunset: No extra hint is given
|
||||
*/
|
||||
questionHint?: string | Record<string, string>
|
||||
questionHint?: string | Translatable
|
||||
|
||||
/**
|
||||
* A list of labels. These are strings that are used for various purposes, e.g. to filter them away
|
||||
|
|
|
@ -138,6 +138,7 @@ export interface TagRenderingConfigJson {
|
|||
/**
|
||||
* question: What icon should be added to this mapping?
|
||||
* An icon supporting this mapping; typically shown pretty small
|
||||
* inline: <img src='{icon}' class="w-8 h-8" /> {icon}
|
||||
* Type: icon
|
||||
*/
|
||||
icon?:
|
||||
|
|
|
@ -150,7 +150,9 @@ export default class TagRenderingConfig {
|
|||
json.freeform.type &&
|
||||
Validators.availableTypes.indexOf(<any>json.freeform.type) < 0
|
||||
) {
|
||||
throw `At ${context}: invalid type, perhaps you meant ${Utils.sortedByLevenshteinDistance(
|
||||
throw `At ${context}: invalid type ${
|
||||
json.freeform.type
|
||||
}, perhaps you meant ${Utils.sortedByLevenshteinDistance(
|
||||
json.freeform.key,
|
||||
<any>Validators.availableTypes,
|
||||
(s) => <any>s
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue