rougail/doc/condition/condition.md
2023-11-09 21:48:23 +01:00

135 lines
3.5 KiB
Markdown

# Les propriétés calculées
Les propriétés calculées permettent d'ajouter ou de supprimer des propriétés à une [variable](../variable/README.md) ou une [famille](../family/README.md) suivant le contexte.
Nous allons nous concentrer ici sur la proprété `hidden`, mais ce qui est dit est vrai pour toutes les propriétés.
## Une propriété calculée de type variable
Une variable peut donc être calculé via la résultat d'une autre variable.
Attention, cette autre variable doit obligatoirement être de type `boolean` :
```yml
---
version: '1.0'
condition:
type: boolean
my_variable:
hidden:
type: variable
variable: rougail.condition
```
Si la valeur de la variable "rougail.condition" est `True` alors la variable "rougail.my_variable" est cachée.
## Une propriété calculée de type jinja
Il est possible d'écrire la condition en Jinja :
```yml
---
version: '1.0'
condition:
default: 'do not hide!'
my_variable:
hidden:
type: jinja
jinja: |
{% if rougail.condition and rougail.condition == "hide!" %}
true
{% else %}
false
{% endif %}
```
Dans ce cas la variable est cachée si la valeur de la variable "rougail.condition" est `hide!` et elle n'a pas caché pour tout autre valeur.
Attention toujours prendre en considération que "rougail.condition" peut être égale à `None`.
Il est possible d'ajouter des [paramètres](../param/README.md) à la condition de type `jinja`.
Il est possible d'ajouter des paramètres à la fonction
La [cible](../target/README.md) de la condition est ici "my_variable".
Donc ici la variable est caché à l'utilisateur si la variable "condition" est à True (le paramètre).
## Un condition avec plusieurs paramètres
Il est également possible de mettre plusieurs paramètre :
```xml
<variables>
<variable name="condition"/>
<variable name="my_variable"/>
</variables>
<constraints>
<condition name="hidden_if_in" source="condition">
<param>yes</param>
<param>maybe</param>
<target>my_variable</target>
</condition>
</constraints>
```
En YAML :
```yml
variables:
- variable:
name: condition
- variable:
name: my_variable
constraints:
- condition:
- name: hidden_if_in
source: condition
param:
- text: 'yes'
- text: 'maybe'
target:
- text: my_variable
```
## Une condition optionnelle
Il est possible de définir une condition avec une variable source qui n'existe pas dans toutes les contextes.
Dans ce cas, on met la condition en "optionnelle".
Si la variable source existe, la condition s'applique.
Si la variable source n'existe pas :
- si le nom fini en _if_in (par exemple hidden_if_in), l'action est forcée sans condition (les cibles sont hidden)
- si le nom fini en _if_not_in (par exemple hidden_if_not_in), la condition est totalement ignorée
Ces deux comportements peuvent être changé à tout moment avec l'attribut "apply_on_fallback". Dans ce cas :
- si la valeur de "apply_on_fallback" est "True", l'action est forcée sans condition
- si la valeur de "apply_on_fallback" est "False", la condition est totalement ignorée
Exemple :
```xml
<condition name="hidden_if_in" source="condition" optional="True", apply_on_fallback="False">
<param>yes</param>
<param>maybe</param>
<target>my_variable</target>
</condition>
```
En YAML :
```yml
- condition:
- name: hidden_if_in
source: condition
optional: true
apply_on_fallback: false
param:
- text: 'yes'
- text: 'maybe'
target:
- text: my_variable
```