# Βοηθοί δεδομένων: QUERIFY, STRINGIFY, ENCRYPT, FN, CL, TRANSLATE, UNAUTHORIZED και Thelpers

> Δημιουργήστε συμβολοσειρές ερωτήματος, γράψτε JSON χωρίς ό,τι δεν θέλετε, κωδικοποιήστε μια τιμή με κλειδί, μεταγλωττίστε μια έκφραση, φορτώστε λίστες τιμών, μεταφράστε κείμενα, ελέγξτε δικαιώματα και προσθέστε βοηθούς στα πρότυπα.

Framework: jcomponent20
Product: jComponent 20 (jcomponent@20)
Language: el
Content-SHA256: 953c844890efc00683580444e4c2d512b34af6d384bdbbce405909b4d9d1b186
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` όταν το κλειδί ή ο τύπος δεν είναι ίδια. **Είναι συσκότιση για τον browser, όχι ασφάλεια:** οποιοσδήποτε μπορεί να το διαβάσει χωρίς το κλειδί.
- Το `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>
```
