Pravidla pro JavaScript
Veškerý klientský JavaScript se píše v TypeScriptu v assets/account/js/src/. Před psaním nového kódu vždy zkontroluj, zda už neexistuje řešení v libs/ nebo components/.
Nepoužívej nativní API přímo (fetch, XMLHttpRequest, document.cookie, localStorage, sessionStorage). Vždy používej frameworkové wrappery z libs/ — zajišťují konzistentní chování, error handling a retry logiku.
| AJAX volání | Vždy přes Account.HttpClient, nikdy nativní fetch/XMLHttpRequest |
| Cookies | Vždy přes Account.Cookie, nikdy document.cookie |
| LocalStorage | Vždy přes Account.LocalStorage, nikdy nativní localStorage |
| SessionStorage | Vždy přes Account.SessionStorage, nikdy nativní sessionStorage |
| UI komponenty | Projdi components/ než budeš psát vlastní (Modal, Select, DateTimePicker, TabCard, ...) |
HttpClient
Account.HttpClient — wrapper nad jQuery AJAX s automatickým retry, timeoutem a global loaderem.
| getAsync(url, globalLoader?, preventCloseLoader?) | GET požadavek. Vrátí Promise<HttpResponse>. |
| postAsync(url, data, globalLoader?, preventCloseLoader?) | POST požadavek. Data se odešlou jako FormData. |
| setTimeout(ms) | Nastaví timeout (výchozí 5000ms) |
| setRetry(count) | Počet opakování při selhání (výchozí 3) |
HttpResponse
| isSuccessStatusCode | bool — HTTP 200–299 |
| statusCode | HTTP status kód |
| content.readAsString() | Vrátí odpověď jako string |
| content.readAsJson() | Parsuje a vrátí JSON objekt |
| content.isJson() | Vrátí true pokud je odpověď validní JSON |
// GET
let httpClient = new Account.HttpClient();
let response = await httpClient.getAsync('/api/users', false); // false = bez global loaderu
if(response.isSuccessStatusCode) {
let data = response.content.readAsJson();
}
// POST
let response = await httpClient.postAsync('/api/users', {
name: 'Denis',
email: 'denis@example.com'
});
// Vlastní timeout a retry
httpClient.setTimeout(10000);
httpClient.setRetry(5);
Parametr globalLoader (výchozí true) zobrazí/skryje fullscreen page loader automaticky. Pro AJAX v komponentách (TabCard, Submenu) se většinou nastaví na false.
Cookie
Account.Cookie — práce s cookies na klientu.
| Cookie.get(name) | Vrátí hodnotu cookie nebo null |
| Cookie.set(name, value, options?) | Nastaví cookie |
| Cookie.delete(name, options?) | Smaže cookie |
Options
| expires | Počet dní (desetinné číslo: 0.5 = 12 hodin) |
| path | Výchozí '/' |
| domain | Doména cookie |
| secure | Pouze přes HTTPS |
| sameSite | 'Strict' | 'Lax' | 'None' |
// Nastavení na 7 dní
Account.Cookie.set('theme', 'dark', {expires: 7});
// Čtení
let theme = Account.Cookie.get('theme'); // 'dark' nebo null
// Smazání
Account.Cookie.delete('theme');
LocalStorage & SessionStorage
Wrappery nad nativním Web Storage API. Konzistentní API pro oba typy.
| LocalStorage.get(key) / SessionStorage.get(key) | Vrátí string nebo null |
| LocalStorage.set(key, value) / SessionStorage.set(key, value) | Uloží string |
| LocalStorage.delete(key) / SessionStorage.delete(key) | Smaže klíč |
// LocalStorage — přetrvá i po zavření prohlížeče
Account.LocalStorage.set('settings', JSON.stringify({theme: 'dark'}));
let settings = JSON.parse(Account.LocalStorage.get('settings'));
// SessionStorage — jen pro aktuální session (záložku)
Account.SessionStorage.set('tempFilter', 'active');
let filter = Account.SessionStorage.get('tempFilter');
| LocalStorage | Data přetrvají i po zavření prohlížeče. Pro uživatelské preference, nastavení. |
| SessionStorage | Data jen po dobu otevřené záložky. Pro dočasné filtry, stav formuláře. |
UI Komponenty
Přehled všech dostupných komponent v components/. Před tvorbou nového UI prvku vždy zkontroluj tento seznam.
| Modal | Modální okno — open, close, openFromUrl, setContent. Velikosti 300–900. |
| Offcanvas | Boční panel zleva/zprava. 400px desktop, 100% mobil. |
| Dropdown | Rozbalovací menu s pozicováním a offset podporou. |
| Select | Custom select s optgroup, divider, disabled, ikonami v options. |
| DateTimePicker | Datepicker, datetimepicker, timepicker s konfigurovatelnými texty. |
| DateRangePicker | Výběr rozsahu datumů s vizuálním zvýrazněním range. |
| RadioButton | Horizontální (+ small) a vertikální radio group. |
| TabCard | Záložkový panel s AJAX načítáním, stránkováním, hash navigací. |
| Submenu | AJAX navigace mezi záložkami stránky s pushState. |
Ukázky a detailní dokumentace všech komponent jsou na stránce UI Elements.
