Outre le simple accès, vous pouvez utiliser la configuration pour générer différentes versions du balisage de votre flux de travail. Par exemple, vous pouvez générer un balisage en utilisant une boucle sur une entrée de texte multiple, ou conditionnellement en fonction d'une entrée de case à cocher.
Les fonctions d'aide sont souvent idéales à cet effet. Les fonctions d'aide suivantes sont disponibles :
Aides générales
Mots clés et description
Vous trouverez ci-dessous la liste des mots-clés et leurs descriptions avec un exemple de code et un exemple de sortie :
assigner: Assigner une variable
{#assign "myval"}
This is a variable
{/assign}
sortie: Une variable "myVal" dans le contexte avec la valeur correspondante.
mathématiques : Arithmétique simple (avec +,-,*,/,%)
{math myNum "+" 5}
chacun : Vous pouvez accéder à l'index actuel de la boucle via @index et au nom de la clé actuelle via @key. Vous pouvez également utiliser @first et @last pour vérifier si vous êtes à la première/dernière étape de l'itération.
{#each myObj}
{@index}
{/each}
sortie : Par exemple, "0 1 2 3 4".
for : Une boucle for qui permet une simple répétition. Un opérateur peut être l'un de [==,>,<,>=,<=]. Un paramètre de hachage peut être utilisé pour incrémenter ou décrémenter le compteur.
{#for 5 ">" 0 after="-2"}
{this}
{/for}
comparer: Compare deux valeurs. L'opérateur peut être l'un des suivants : [==, !=, <, <=, equalsIgnoreCase].
{comapre myStr "==" "Hallo}
sortie : Vrai, si myStr est "Hallo".
switch, case : Une construction switch/case
{#switch type}
{#case "article"}
This is an article
{/case}
{#case "resource"}
This is a resource
{/case}
sortie : Si le type est "article", la sortie est "Ceci est un article".
si : Insère un bloc de la condition évalue à vrai
{#if (or (and isCar hasPlate) (and (not isCar) hasLicense)))}
Allowed to drive.
{else}
Not allowed to drive.
sortie : Si les variables booléennes "isCar=false" et "hasLicense=true", la sortie sera "Autorisé à conduire".
à moins que : Inverse de celui-ci
{unless trueVar}
This is text
{/unless}
sortie : Avec "trueVar=true", la sortie sera "Ceci est du texte".
et : Le "et" logique de plusieurs valeurs booléennes.
{and isCar hasPlate}
sortie : Vrai ou Faux, en fonction des variables
ou : Le "ou" logique de plusieurs valeurs booléennes.
{or isCar hasPlate}
sortie : Vrai ou Faux en fonction des variables
not : Le "non" logique d'une valeur booléenne.
{not isCar}
Sortie : Vrai, si "isCar=false".
collection : Une aide qui retourne la taille ou la propriété singleton d'une collection. L'opérateur peut être l'un de ["size", "is_not_singleton", "is_singleton"].
{collection myColl "size"}
sortie : E.g.4
lookup : Permet la résolution dynamique des paramètres à l'aide de variables, par exemple, afin de résoudre les valeurs des index de tableaux.
{#each bar}
{lookup ../foo@index}
{/each}
avec : Peut être utilisé pour passer un paramètre à un helper.
{#with myVal}
{#ech myObj}
{/each}
{/with}
Aides pour les cordes
Ci-dessous les mots-clés utilisés comme String Helpers avec leur description, exemple de code et exemple de résultat,
caseformat : Formatage de la casse pour les chaînes de caractères. L'opérateur peut être l'un des éléments suivants : ["minuscule", "minuscule_réduit", "minuscule_hyphen"].
{caseFormat myStr "lowercase_underscore"}
output : Pour myStr="This is a string", la sortie sera "this_is_a_string".
capitalizeFirst : Pour mettre la première lettre en majuscule
{capitalizeFirst value}
sortie : Si la valeur est "teamviewer", la sortie sera "Teamviewer".
cut : Supprime toutes les valeurs des arguments de la chaîne de caractères donnée.
{cut value " "}
output : Si la valeur est "String with spaces", la sortie sera "Stringwithspaces".
defaultIfEmpty : Si la valeur vaut False, utilise la valeur par défaut donnée. Sinon, utilise la valeur
{defaultIfEmpty value "nothing"}
sortie : Si la valeur="false", la sortie est "rien".
join : Joint un tableau, un itérateur ou un itérable avec une chaîne de caractères.
{join "a" "b" "c" " // " prefix="" suffix=""}
sortie : "a//b//c"
center : Centre la valeur dans un champ d'une largeur donnée.
{center value size=19 pad=" "}
ljust : Aligne à gauche la valeur dans un champ d'une largeur donnée.
{ljust value 20 pad=" "}
rjust : Aligne à droite la valeur d'un champ d'une largeur donnée.
{rjust value 20 pad=" "}
sous-chaîne : Diviser la chaîne de caractères en sous-chaînes
{substring value 3 }
{substring value 0 3 }
output : Si la valeur est "TeamViewer", la sortie sera respectivement " Viewer " et " Team ".
inférieur : Convertit une chaîne de caractères en minuscules
{lower value}
Sortie : Si la valeur est "TeamViewer", la sortie sera "teamviewer".
supérieur : Convertit une chaîne de caractères en majuscules.
{upper value}
output : Si la valeur est "Hello", la sortie sera "HELLO".
slugify : Convertit en minuscules, supprime les caractères autres que les mots (alphanumériques et caractères de soulignement) et convertit les espaces en traits d'union. Supprime également les espaces blancs de tête et de queue
{slugify value}
output : Si la valeur est "TeamViewer is great", l'output sera "teamviewer-is-great".
stringFormat : Formate la variable selon l'argument, un spécificateur de formatage de chaîne de caractères.
{stringFormat value param1}
sortie : Si value="Hello %s" et param1="TeamViewer", la sortie sera "Hello TeamViewer".
stringTags : Supprime toutes les balises [X]HTML
{stripTags value}
capitaliser : Met en majuscules tous les mots séparés par des espaces blancs dans une chaîne de caractères.
{ capitalize value fully=false}
output : Si la valeur est "my first post", l'output sera "My First Post".
abréger : Tronque une chaîne de caractères si elle est plus longue que le nombre de caractères spécifié. Les chaînes tronquées se terminent par une séquence d'ellipses traduisibles ("...").
{abbreviate value 6 }
Si la valeur est "TeamViewer is great ", la sortie sera " TeamVi... ".
wordWrap : Entoure les mots à la longueur de ligne spécifiée
{ wordWrap value 5 }
output : Si la valeur est "Mes mots sont longs", alors l'output sera "Mes mots sont longs".
replace : Remplace chaque sous-chaîne de cette chaîne qui correspond à la séquence littérale cible par la séquence littérale de remplacement spécifiée.
{ replace value "..." "rocks"}
output : Si la valeur est "Handlebars ...", la sortie sera "Handlebars rocks".
yesno : Correspond aux valeurs true, false et (facultativement) null, aux chaînes de caractères "yes", "no", "maybe".
{ yesno value yes="yes" no="no" maybe="maybe" }
dateformat : L'option de format peut être spécifiée comme un paramètre ou un hachage (aussi appelé paramètre de noms). Il peut s'agir de "full" (par exemple, mardi 19 juin 2012), "medium" (par exemple, 19 juin 2012), "short" (par exemple, 19/06/12) ou "pattern" (un modèle de date).
{dateFormat date ["format"]
[format="format"]
[tz=timeZone|timeZoneId]}
numberFormat : Le paramètre Format est l'un des suivants : ["integer", "currency", "percent", "pattern"]. Les autres options disponibles sont : groupingUsed (Définit si le groupement sera utilisé ou non dans le format), maximumFractionDigits (nombre maximum de chiffres autorisés dans la partie fraction), maximumIntegerDigits (nombre maximum de chiffres dans la partie entière), minimumFractionDigits (nombre minimum de chiffres dans la partie fraction), minimumIntegerDigits (nombre minimum de chiffres dans la partie entière), parseIntegerOnly (si les nombres doivent être analysés en tant qu'entiers uniquement) et roundingMode (le RoundingMode utilisé dans ce NumberFormat [UP, DOWN, CEILING, FLOOR, HALF_UP, HALF_DOWN, HALF_EVEN, UNNECESSARY]).
{numberFormat number ["format"] [locale=default]}
Exemples
Examinons quelques exemples.
{
"General": {
"use_camera": {
"title": "Use Camera of Smartglasses",
"inputType": "checkbox-input",
"value": "true"
}
}
}
<onresume>
<rule id="auto">
<expression>1</expression>
<actions>
§{#if General.use_camera.value}§
<action ref="start_cam"/>
§{/if}§
</actions>
</rule>
</onresume>
Comme vous pouvez le constater, le mot-clé if permet ici d'exécuter une action uniquement lorsque le paramètre de configuration correspondant est défini comme étant vrai. Il est important de noter que tous les mots-clés sont utilisés à l'intérieur de la portée en écrivant d'abord un #.
Voici un autre exemple utilisant chacun d'eux. Dans cet exemple, nous utilisons un multiple-dropdown-input pour pouvoir configurer un certain nombre de boutons qui sont ensuite affichés dans l'interface utilisateur. Pour les deux derniers boutons, nous générons un Barcode-Scan selon qu'une case à cocher est activée ou non, ainsi qu'un autre bouton par défaut. Ils sont affichés le plus à droite dans l'interface.
{
"Configuration": {
"buttons": {
"title": "Function Keys",
"inputType": "multiple-dropdown-input",
"elements": [
{
"name": "TAB",
"content": "ANDRRES_key_tab",
"type": "TEXT",
"translatable": true
},
{
"name": "DELETE",
"content": "ANDRRES_key_delete",
"type": "TEXT",
"translatable": true
},
{
"name": "BACKSPACE",
"content": "ANDRRES_key_backspace",
"type": "TEXT",
"translatable": true
},
{
"name": "F1",
"content": "F1",
"speech_cmd": "F 1",
"type": "TEXT"
},
{
"name": "F2",
"content": "F2",
"speech_cmd": "F 2",
"type": "TEXT"
}
],
"value": [
{
"name": "TAB",
"content": "ANDRRES_key_tab",
"type": "TEXT",
"translatable": true
},
{
"name": "DELETE",
"content": "ANDRRES_key_delete",
"type": "TEXT",
"translatable": true
}
]
}
}
}
<ui_update id="show_key_input_footer">
<widget_params>
<ui_element name="FOOTER_L2">
<param name="VISIBILITY">INVISIBLE</param>
</ui_element>
<ui_element name="RETURN_L1">
<param name="menu_id" descriptor="">0</param>
</ui_element>
§{#each Configuration.buttons.value}§
<ui_element name="§{name}§">
<param name="menu_id" descriptor="">§{math @index "+" 1}§</param>
</ui_element>
§{#if @last}§
§{#if Configuration.enable_camera.value}§
<ui_element name="CAMERA">
<param name="MENU_ID">§{math @../index "+" 2}§</param>
</ui_element>
<ui_element name="ENTER">
<param name="MENU_ID">§{math @../index "+" 3}§</param>
</ui_element>
§{else}§
<ui_element name="ENTER">
<param name="MENU_ID">§{math @../index "+" 2}§</param>
</ui_element>
§{/if}§
§{/if}§
§{/each}§
</widget_params>
</ui_update>
Comme vous pouvez le constater, vous pouvez créer des composants hautement configurables comme celui-ci.