# Pomocniki danych: QUERIFY, STRINGIFY, ENCRYPT, FN, CL, TRANSLATE, UNAUTHORIZED i Thelpers

> Buduj ciągi zapytań, zapisuj JSON bez tego, czego nie chcesz, koduj wartość kluczem, kompiluj wyrażenie, ładuj listy wartości, tłumacz teksty, sprawdzaj uprawnienia i dodawaj pomocniki do szablonów.

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

- `QUERIFY([url], object)` buduje ciąg zapytania: wartości `null` są pomijane, tablice łączone przecinkami, daty zamieniane na teksty ISO, a wszystko jest kodowane. Z url jest do niego dołączany (`?` lub `&`), także po metodzie jak w `'POST /api/x'`.
- `STRINGIFY(object, [compress], [fields])` to `JSON.stringify()` z dwiema opcjami: `compress: true` pomija puste teksty, `null` i `false` oraz przycina teksty; `fields` to lista nazw, które zostają, funkcja `(key, value)`, która decyduje, lub obiekt, w którym `name: false` pomija pole.
- `ENCRYPT(value, [key], [type])` zamienia tekst lub obiekt w tekst szesnastkowy kończący się kontrolą klucza, a `DECRYPT(text, [key], [type])` oddaje wartość lub `undefined`, gdy klucz albo typ nie są takie same. **To zaciemnienie dla przeglądarki, nie bezpieczeństwo:** każdy może to odczytać bez klucza.
- `FN('n => n * 2')` kompiluje wyrażenie do funkcji i ją zapamiętuje; bez `=>` tekst jest ciałem, a argument nazywa się `value`.
- `NOOP`, `EMPTYARRAY` i `EMPTYOBJECT` (zamrożone: nie da się ich zmienić przez pomyłkę), `MONTHS` i `DAYS` (nazwy po angielsku) oraz `NOW` (`Date`, który jComponent utrzymuje aktualnym).
- **Listy kodów:** `CLINIT(name, function(next) {}, [expire], [init])` rejestruje listę, którą ładuje `function` (wywołuje `next(value)`; z tekstem zamiast funkcji adres taki jak `GET /api/countries/`). `CL('a,b', callback)` ładuje listy, które nie są załadowane, i zapisuje każdą w `DEF.cl.<name>` (oraz w stanie pod tą ścieżką); `CLRELOAD(name, callback)` ładuje je ponownie.
- **Tłumaczenie:** `LOCALIZE(text)` ładuje słownik w formacie plików zasobów Total.js (`key : translation`, po jednym w wierszu, `//` dla komentarzy), a `TRANSLATE(text)` zastępuje każde `@(text)` jego tłumaczeniem (tym samym tekstem, gdy go nie ma). Kluczem jest `T` plus `HASH()` tekstu w systemie o podstawie 36.
- `UNAUTHORIZED(...names)` zwraca `false`, gdy `window.user` ma jedno z uprawnień (`user.permissions` lub `user.roles`, lista albo obiekt) lub jest `sa` / `su`, a w przeciwnym razie `true` (także gdy nie ma użytkownika).
- `Thelpers` (ten sam obiekt co `Tangular.helpers`, a `Ta` to `Tangular`) zawiera pomocniki szablonów: dodaj jednego przez `Thelpers.name = function(value, ...arguments)`, gdzie `this` to model, i użyj go jako `{{ 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>
```
