# Datahelpers: QUERIFY, STRINGIFY, ENCRYPT, FN, CL, TRANSLATE, UNAUTHORIZED en Thelpers

> Bouw querystrings, schrijf JSON zonder wat je niet wilt, codeer een waarde met een sleutel, compileer een expressie, laad lijsten met waarden, vertaal teksten, controleer rechten en voeg helpers toe aan de sjablonen.

Framework: jcomponent20
Product: jComponent 20 (jcomponent@20)
Language: nl
Content-SHA256: db75b216c219f45b630dd2c8c7b802e1220dd6bd29cb9f5df55ee0d25f165f2a
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: jcomponent20@3fedd009a277f50fddc608b97afbec553b67c51b
Review: not-recorded

- `QUERIFY([url], object)` bouwt een querystring: `null`-waarden worden overgeslagen, arrays worden met komma's samengevoegd, datums worden ISO-teksten en alles wordt gecodeerd. Met een url wordt hij eraan toegevoegd (`?` of `&`), ook na een methode zoals in `'POST /api/x'`.
- `STRINGIFY(object, [compress], [fields])` is `JSON.stringify()` met twee opties: `compress: true` laat lege teksten, `null` en `false` weg en trimt de teksten; `fields` is een lijst met de namen die blijven, een functie `(key, value)` die beslist, of een object waarin `name: false` een veld weglaat.
- `ENCRYPT(value, [key], [type])` verandert een tekst of een object in een hexadecimale tekst die eindigt met een controle van de sleutel, en `DECRYPT(text, [key], [type])` geeft de waarde terug, of `undefined` wanneer sleutel of type niet gelijk zijn. **Het is een versluiering voor de browser, geen beveiliging:** iedereen kan het zonder de sleutel lezen.
- `FN('n => n * 2')` compileert een expressie tot een functie en onthoudt haar; zonder `=>` is de tekst de body en heet het argument `value`.
- `NOOP`, `EMPTYARRAY` en `EMPTYOBJECT` (bevroren: ze kunnen niet per ongeluk worden gewijzigd), `MONTHS` en `DAYS` (de namen in het Engels) en `NOW` (een `Date` die jComponent actueel houdt).
- **Codelijsten:** `CLINIT(name, function(next) {}, [expire], [init])` registreert een lijst die `function` laadt (hij roept `next(value)` aan; met een tekst in plaats van een functie een adres zoals `GET /api/countries/`). `CL('a,b', callback)` laadt de lijsten die niet geladen zijn en slaat elk op in `DEF.cl.<name>` (en in de status op dat pad); `CLRELOAD(name, callback)` laadt ze opnieuw.
- **Vertaling:** `LOCALIZE(text)` laadt een woordenboek in het formaat van de resourcebestanden van Total.js (`key : translation`, één per regel, `//` voor commentaar) en `TRANSLATE(text)` vervangt elke `@(text)` door zijn vertaling (dezelfde tekst als die er niet is). De sleutel is `T` plus de `HASH()` van de tekst in basis 36.
- `UNAUTHORIZED(...names)` geeft `false` terug wanneer `window.user` een van de rechten heeft (`user.permissions` of `user.roles`, een lijst of een object) of `sa` / `su` is, en anders `true` (ook wanneer er geen gebruiker is).
- `Thelpers` (hetzelfde object als `Tangular.helpers`, en `Ta` is `Tangular`) bevat de helpers van de sjablonen: voeg er een toe met `Thelpers.name = function(value, ...arguments)`, waarbij `this` het model is, en gebruik hem als `{{ value | name(argument) }}`.

```html public/index.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8" />
	<title>jComponent</title>
	<link rel="stylesheet" href="//cdn.componentator.com/spa.min@20.css" />
	<script src="//cdn.componentator.com/spa.min@20.js"></script>
</head>
<body>
	<p class="out"></p>
</body>
</html>
```
