# Datahjälpare: QUERIFY, STRINGIFY, ENCRYPT, FN, CL, TRANSLATE, UNAUTHORIZED och Thelpers

> Bygg frågesträngar, skriv JSON utan det du inte vill ha, koda ett värde med en nyckel, kompilera ett uttryck, ladda listor med värden, översätt texter, kontrollera behörigheter och lägg till hjälpare i mallarna.

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

- `QUERIFY([url], object)` bygger en frågesträng: `null`-värden hoppas över, arrayer sammanfogas med kommatecken, datum blir ISO-texter och allt kodas. Med en url läggs den till i den (`?` eller `&`), även efter en metod som i `'POST /api/x'`.
- `STRINGIFY(object, [compress], [fields])` är `JSON.stringify()` med två alternativ: `compress: true` utelämnar tomma texter, `null` och `false` och trimmar texterna; `fields` är en lista över de namn som behålls, en funktion `(key, value)` som avgör, eller ett objekt där `name: false` utelämnar ett fält.
- `ENCRYPT(value, [key], [type])` gör en text eller ett objekt till en hexadecimal text som slutar med en kontroll av nyckeln, och `DECRYPT(text, [key], [type])` ger tillbaka värdet, eller `undefined` när nyckeln eller typen inte är desamma. **Det är en obfuskering för webbläsaren, inte säkerhet:** vem som helst kan läsa den utan nyckeln.
- `FN('n => n * 2')` kompilerar ett uttryck till en funktion och kommer ihåg den; utan `=>` är texten kroppen och argumentet heter `value`.
- `NOOP`, `EMPTYARRAY` och `EMPTYOBJECT` (frysta: de kan inte ändras av misstag), `MONTHS` och `DAYS` (namnen på engelska) och `NOW` (ett `Date` som jComponent håller uppdaterat).
- **Kodlistor:** `CLINIT(name, function(next) {}, [expire], [init])` registrerar en lista som `function` laddar (den anropar `next(value)`; med en text i stället för en funktion en adress som `GET /api/countries/`). `CL('a,b', callback)` laddar de listor som inte är laddade och lagrar var och en i `DEF.cl.<name>` (och i tillståndet på den sökvägen); `CLRELOAD(name, callback)` laddar dem igen.
- **Översättning:** `LOCALIZE(text)` laddar en ordbok i formatet för Total.js resursfiler (`key : translation`, en per rad, `//` för kommentarer) och `TRANSLATE(text)` ersätter varje `@(text)` med dess översättning (samma text när det inte finns någon). Nyckeln är `T` plus textens `HASH()` i bas 36.
- `UNAUTHORIZED(...names)` returnerar `false` när `window.user` har en av behörigheterna (`user.permissions` eller `user.roles`, en lista eller ett objekt) eller är `sa` / `su`, och annars `true` (även när det inte finns någon användare).
- `Thelpers` (samma objekt som `Tangular.helpers`, och `Ta` är `Tangular`) innehåller mallarnas hjälpare: lägg till en med `Thelpers.name = function(value, ...arguments)`, där `this` är modellen, och använd den som `{{ 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>
```
