# Javascript-Kontext im tibi-admin

Diverse `meta`-Angaben ermöglichen neben der eigentliche Angabe eines festen Wertes wie z.B:

```yaml
defaultValue: "Hallo Welt"
```

auch die Angabe eines Javascript-Ausdrucks, der zur Laufzeit ausgewertet wird. Dieser Ausdruck wird in einem Javascript-Kontext clientseitig ausgeführt und ist mit diversen Variablen vorbelegt.
Die Angabe des Javascript-Codes erfolgt dabei meist mit dem `eval`-Attribut dessen Wert der String des Codes ist:

```yaml
defaultValue:
  eval: "new Date().toISOString().substr(0, 10)"
```

In den Fällen in denen ein Oneliner nicht ausreiched ist, bieten sich "selbst ausführende Funktionen" an, wie z.B.:

```js
(function() {
    return new Date().toISOString().substr(0, 10)
})()
```

Um diese im YAML unterzubringen nutzt man YAML-Multiline-Modifizierer:

```yaml
defaultValue:
  eval: |
    (function() {
      return new Date().toISOString().substr(0, 10)
    })()
```

## Kontext-Variablen

Der Javascript-Kontext ist mit folgenden Variablen standardmäßig angereichert:

| Variable | Datentyp | Bedeutung |
| --- | --- | --- | --- | --- |
| `$namespace` | string | Der Namespacebezeichner des aktuellen Projekts |
| `$apiBase` | string | Basis-URL des API-Endpunkts |
| `$projectBase` | string | Basis-URL des Projekts-API-Endpunkts (`$apiBase`_/`$namespace`/) |
| `$auth` TODO | object | Das aktuelle Auth-Objetc des eingeloggten Benutzers |
| `$project` | object | Das aktuelle Projekt-Objekt, siehe [API /project](./../restapi/project.md) |

Die `meta`-Daten der Collections und Fields bekommen in den Javascript-Kontext der `eval`-Eigenschaften noch jeweils zusätzliche Variablen.