# Daten-Helfer: QUERIFY, STRINGIFY, ENCRYPT, FN, CL, TRANSLATE, UNAUTHORIZED und Thelpers

> Baue Query-Strings, schreibe JSON ohne das, was du nicht willst, kodiere einen Wert mit einem Schlüssel, kompiliere einen Ausdruck, lade Wertelisten, übersetze Texte, prüfe Berechtigungen und füge den Templates Helfer hinzu.

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

- `QUERIFY([url], object)` baut einen Query-String: `null`-Werte werden übersprungen, Arrays mit Kommas verbunden, Daten werden zu ISO-Texten und alles wird kodiert. Mit einer URL wird er an sie angehängt (`?` oder `&`), auch nach einer Methode wie in `'POST /api/x'`.
- `STRINGIFY(object, [compress], [fields])` ist `JSON.stringify()` mit zwei Optionen: `compress: true` lässt leere Texte, `null` und `false` weg und trimmt die Texte; `fields` ist eine Liste der Namen, die bleiben, eine Funktion `(key, value)`, die entscheidet, oder ein Objekt, in dem `name: false` ein Feld weglässt.
- `ENCRYPT(value, [key], [type])` verwandelt einen Text oder ein Objekt in einen hexadezimalen Text, der mit einer Prüfung des Schlüssels endet, und `DECRYPT(text, [key], [type])` gibt den Wert zurück, oder `undefined`, wenn Schlüssel oder Typ nicht gleich sind. **Es ist eine Verschleierung für den Browser, keine Sicherheit:** Jeder kann es ohne den Schlüssel lesen.
- `FN('n => n * 2')` kompiliert einen Ausdruck zu einer Funktion und merkt sie sich; ohne `=>` ist der Text der Rumpf und das Argument heißt `value`.
- `NOOP`, `EMPTYARRAY` und `EMPTYOBJECT` (eingefroren: Sie können nicht aus Versehen geändert werden), `MONTHS` und `DAYS` (die Namen auf Englisch) und `NOW` (ein `Date`, das jComponent aktuell hält).
- **Code-Listen:** `CLINIT(name, function(next) {}, [expire], [init])` registriert eine Liste, die `function` lädt (sie ruft `next(value)` auf; mit einem Text statt einer Funktion eine Adresse wie `GET /api/countries/`). `CL('a,b', callback)` lädt die nicht geladenen Listen und speichert jede in `DEF.cl.<name>` (und im Zustand unter diesem Pfad); `CLRELOAD(name, callback)` lädt sie erneut.
- **Übersetzung:** `LOCALIZE(text)` lädt ein Wörterbuch im Format der Ressourcendateien von Total.js (`key : translation`, eines pro Zeile, `//` für Kommentare) und `TRANSLATE(text)` ersetzt jedes `@(text)` durch seine Übersetzung (denselben Text, wenn es keine gibt). Der Schlüssel ist `T` plus der `HASH()` des Textes zur Basis 36.
- `UNAUTHORIZED(...names)` gibt `false` zurück, wenn `window.user` eine der Berechtigungen hat (`user.permissions` oder `user.roles`, eine Liste oder ein Objekt) oder `sa` / `su` ist, und sonst `true` (auch wenn es keinen Benutzer gibt).
- `Thelpers` (dasselbe Objekt wie `Tangular.helpers`, und `Ta` ist `Tangular`) enthält die Helfer der Templates: Füge einen mit `Thelpers.name = function(value, ...arguments)` hinzu, wobei `this` das Modell ist, und nutze ihn 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>
```
