# Ajutoare pentru date: QUERIFY, STRINGIFY, ENCRYPT, FN, CL, TRANSLATE, UNAUTHORIZED și Thelpers

> Construiește șiruri de interogare, scrie JSON fără ce nu vrei, codifică o valoare cu o cheie, compilează o expresie, încarcă liste de valori, tradu texte, verifică permisiuni și adaugă ajutoare șabloanelor.

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

- `QUERIFY([url], object)` construiește un șir de interogare: valorile `null` sunt omise, array-urile sunt unite cu virgule, datele devin texte ISO și totul este codificat. Cu un url este adăugat la el (`?` sau `&`), și după o metodă ca în `'POST /api/x'`.
- `STRINGIFY(object, [compress], [fields])` este `JSON.stringify()` cu două opțiuni: `compress: true` omite textele goale, `null` și `false` și taie textele; `fields` este o listă a numelor care se păstrează, o funcție `(key, value)` care decide sau un obiect în care `name: false` omite un câmp.
- `ENCRYPT(value, [key], [type])` transformă un text sau un obiect într-un text hexazecimal care se termină cu o verificare a cheii, iar `DECRYPT(text, [key], [type])` returnează valoarea sau `undefined` când cheia ori tipul nu sunt aceleași. **Este o ofuscare pentru browser, nu securitate:** oricine îl poate citi fără cheie.
- `FN('n => n * 2')` compilează o expresie într-o funcție și o ține minte; fără `=>` textul este corpul, iar argumentul se numește `value`.
- `NOOP`, `EMPTYARRAY` și `EMPTYOBJECT` (înghețate: nu pot fi schimbate din greșeală), `MONTHS` și `DAYS` (numele în engleză) și `NOW` (un `Date` pe care jComponent îl ține la zi).
- **Liste de coduri:** `CLINIT(name, function(next) {}, [expire], [init])` înregistrează o listă pe care o încarcă `function` (apelează `next(value)`; cu un text în loc de funcție, o adresă precum `GET /api/countries/`). `CL('a,b', callback)` încarcă listele care nu sunt încărcate și stochează fiecare în `DEF.cl.<name>` (și în stare la acea cale); `CLRELOAD(name, callback)` le încarcă din nou.
- **Traducere:** `LOCALIZE(text)` încarcă un dicționar în formatul fișierelor de resurse Total.js (`key : translation`, unul pe linie, `//` pentru comentarii), iar `TRANSLATE(text)` înlocuiește fiecare `@(text)` cu traducerea sa (același text când nu există). Cheia este `T` plus `HASH()` al textului în baza 36.
- `UNAUTHORIZED(...names)` returnează `false` când `window.user` are una dintre permisiuni (`user.permissions` sau `user.roles`, o listă sau un obiect) sau este `sa` / `su`, și `true` în caz contrar (și când nu există utilizator).
- `Thelpers` (același obiect cu `Tangular.helpers`, iar `Ta` este `Tangular`) conține ajutoarele șabloanelor: adaugă unul cu `Thelpers.name = function(value, ...arguments)`, unde `this` este modelul, și folosește-l ca `{{ 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>
```
