# Помощници за данни: QUERIFY, STRINGIFY, ENCRYPT, FN, CL, TRANSLATE, UNAUTHORIZED и Thelpers

> Изграждайте низове на заявки, пишете JSON без това, което не искате, кодирайте стойност с ключ, компилирайте израз, зареждайте списъци със стойности, превеждайте текстове, проверявайте права и добавяйте помощници към шаблоните.

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

- `QUERIFY([url], object)` изгражда низ на заявка: стойностите `null` се пропускат, масивите се свързват със запетаи, датите стават ISO текстове и всичко се кодира. С url се добавя към него (`?` или `&`), също след метод като в `'POST /api/x'`.
- `STRINGIFY(object, [compress], [fields])` е `JSON.stringify()` с две опции: `compress: true` пропуска празните текстове, `null` и `false` и подрязва текстовете; `fields` е списък с имената, които се запазват, функция `(key, value)`, която решава, или обект, където `name: false` пропуска поле.
- `ENCRYPT(value, [key], [type])` превръща текст или обект в шестнадесетичен текст, който завършва с проверка на ключа, а `DECRYPT(text, [key], [type])` връща стойността или `undefined`, когато ключът или типът не са същите. **Това е заглушаване за браузъра, не сигурност:** всеки може да го прочете без ключа.
- `FN('n => n * 2')` компилира израз във функция и я запомня; без `=>` текстът е тялото, а аргументът се казва `value`.
- `NOOP`, `EMPTYARRAY` и `EMPTYOBJECT` (замразени: не могат да се променят по грешка), `MONTHS` и `DAYS` (имената на английски) и `NOW` (`Date`, който jComponent поддържа актуален).
- **Списъци с кодове:** `CLINIT(name, function(next) {}, [expire], [init])` регистрира списък, който `function` зарежда (извиква `next(value)`; с текст вместо функция, адрес като `GET /api/countries/`). `CL('a,b', callback)` зарежда списъците, които не са заредени, и съхранява всеки в `DEF.cl.<name>` (и в състоянието на този път); `CLRELOAD(name, callback)` ги зарежда отново.
- **Превод:** `LOCALIZE(text)` зарежда речник във формата на ресурсните файлове на Total.js (`key : translation`, по един на ред, `//` за коментари), а `TRANSLATE(text)` замества всяко `@(text)` с превода му (същия текст, когато няма такъв). Ключът е `T` плюс `HASH()` на текста в основа 36.
- `UNAUTHORIZED(...names)` връща `false`, когато `window.user` има едно от правата (`user.permissions` или `user.roles`, списък или обект) или е `sa` / `su`, и `true` в противен случай (също когато няма потребител).
- `Thelpers` (същият обект като `Tangular.helpers`, а `Ta` е `Tangular`) държи помощниците на шаблоните: добавете един с `Thelpers.name = function(value, ...arguments)`, където `this` е моделът, и го използвайте като `{{ 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>
```
