2024-01-25 03:13:18 +01:00
import { SpecialVisualization , SpecialVisualizationState } from "../../SpecialVisualization"
import BaseUIElement from "../../BaseUIElement"
import { UIEventSource } from "../../../Logic/UIEventSource"
import SvelteUIElement from "../../Base/SvelteUIElement"
import { Feature } from "geojson"
import LayerConfig from "../../../Models/ThemeConfig/LayerConfig"
import { default as LanguageElementSvelte } from "./LanguageElement.svelte"
2025-06-26 05:20:12 +02:00
export class LanguageElement extends SpecialVisualization {
2024-01-25 03:13:18 +01:00
funcName : string = "language_chooser"
needsUrls = [ ]
docs : string | BaseUIElement =
"The language element allows to show and pick all known (modern) languages. The key can be set"
args : { name : string ; defaultValue? : string ; doc : string ; required? : boolean } [ ] = [
{
name : "key" ,
required : true ,
2025-02-10 02:04:58 +01:00
doc : "What key to use, e.g. `language`, `tactile_writing:braille:language`, ... If a language is supported, the language code will be appended to this key, resulting in `<key>:nl=yes` if _nl_ is picked " ,
2024-01-25 03:13:18 +01:00
} ,
{
name : "question" ,
required : true ,
doc : "What to ask if no questions are known" ,
} ,
{
name : "render_list_item" ,
doc : "How a single language will be shown in the list of languages. Use `{language}` to indicate the language (which it must contain)." ,
defaultValue : "{language()}" ,
} ,
{
name : "render_single_language" ,
doc : "What will be shown if the feature only supports a single language" ,
required : true ,
} ,
{
name : "render_all" ,
doc : "The full rendering. Use `{list}` to show where the list of languages must come. Optional if mode=single" ,
defaultValue : "{list()}" ,
} ,
{
name : "no_known_languages" ,
doc : "The text that is shown if no languages are known for this key. If this text is omitted, the languages will be prompted instead" ,
} ,
]
2025-07-10 18:26:31 +02:00
example = `
2024-01-25 03:13:18 +01:00
\ ` \` \` json
{ "special" :
"type" : "language_chooser" ,
"key" : "school:language" ,
"question" : { "en" : "What are the main (and administrative) languages spoken in this school?" } ,
"render_single_language" : { "en" : "{language()} is spoken on this school" } ,
"render_list_item" : { "en" : "{language()}" } ,
"render_all" : { "en" : "The following languages are spoken here:{list()}" }
}
\ ` \` \`
`
constr (
state : SpecialVisualizationState ,
tagSource : UIEventSource < Record < string , string > > ,
argument : string [ ] ,
feature : Feature ,
layer : LayerConfig
) : BaseUIElement {
let [ key , question , item_render , single_render , all_render , on_no_known_languages ] =
argument
if ( item_render === undefined || item_render . trim ( ) === "" ) {
item_render = "{language()}"
}
if ( all_render === undefined || all_render . length == 0 ) {
all_render = "{list()}"
}
if ( single_render . indexOf ( "{language()" ) < 0 ) {
throw (
"Error while calling language_chooser: render_single_language must contain '{language()}' but it is " +
single_render
)
}
if ( item_render . indexOf ( "{language()" ) < 0 ) {
throw (
"Error while calling language_chooser: render_list_item must contain '{language()}' but it is " +
item_render
)
}
if ( all_render . indexOf ( "{list()" ) < 0 ) {
throw "Error while calling language_chooser: render_all must contain '{list()}'"
}
if ( on_no_known_languages === "" ) {
on_no_known_languages = undefined
}
return new SvelteUIElement ( LanguageElementSvelte , {
key ,
tags : tagSource ,
state ,
feature ,
layer ,
question ,
on_no_known_languages ,
single_render ,
item_render ,
} )
}
}