# Vytvoření bankovní aplikace Část 1: HTML šablony a směrování ve webové aplikaci ```mermaid journey title Vývojová cesta vaší bankovní aplikace section Základy SPA Pochopte jednopage aplikace: 3: Student Naučte se šablonové koncepty: 4: Student Ovládněte manipulaci s DOM: 4: Student section Směrovací systémy Implementujte směrování na straně klienta: 4: Student Zpracujte historii prohlížeče: 5: Student Vytvořte navigační systémy: 5: Student section Profesionální vzory Vytvářejte modulární architekturu: 5: Student Aplikujte osvědčené postupy: 5: Student Vytvořte uživatelské zážitky: 5: Student ``` Když počítač řízení Apollo 11 navigoval k Měsíci v roce 1969, musel přepínat mezi různými programy, aniž by restartoval celý systém. Moderní webové aplikace fungují podobně – mění to, co vidíte, bez načítání všeho znovu od začátku. To vytváří hladký, responzivní zážitek, který uživatelé dnes očekávají. Na rozdíl od tradičních webových stránek, které načítají celé stránky pro každou interakci, moderní webové aplikace aktualizují pouze části, které je potřeba změnit. Tento přístup, podobně jako řídící centrum mise, které přepíná mezi různými displeji při zachování stálé komunikace, vytváří ten plynulý zážitek, na který jsme zvyklí. Zde je důvod, proč je rozdíl tak výrazný: | Tradiční vícestránkové aplikace | Moderní jednostránkové aplikace | |----------------------------|-------------------------| | **Navigace** | Kompletní načítání stránky pro každou obrazovku | Okamžité přepínání obsahu | | **Výkon** | Pomalejší díky kompletnímu stažení HTML | Rychlejší díky částečným aktualizacím | | **Uživatelský zážitek** | Rušivé blikání stránky | Hladké, aplikací podobné přechody | | **Sdílení dat** | Obtížné mezi stránkami | Snadná správa stavu | | **Vývoj** | Více HTML souborů k údržbě | Jediný HTML s dynamickými šablonami | **Pochopení vývoje:** - **Tradiční aplikace** vyžadují serverové požadavky pro každou navigaci - **Moderní SPA** se načtou jednou a obsah se dynamicky aktualizuje pomocí JavaScriptu - **Očekávání uživatelů** nyní preferují okamžité a bezproblémové interakce - **Výkonové výhody** zahrnují sníženou šířku pásma a rychlejší odezvu V této lekci vytvoříme bankovní aplikaci s více obrazovkami, které plynule na sebe navazují. Podobně jako vědci používají modulární přístroje, které lze přepracovat pro různé experimenty, použijeme HTML šablony jako znovupoužitelné komponenty, které se zobrazují dle potřeby. Budete pracovat s HTML šablonami (znovupoužitelné plány pro různé obrazovky), JavaScriptovým směrováním (systém, který přepíná mezi obrazovkami) a historií prohlížeče API (která zajistí správnou funkci tlačítka zpět). To jsou ty samé základní techniky, které používají frameworky jako React, Vue a Angular. Na konci budete mít funkční bankovní aplikaci, která demonstruje profesionální principy jednostránkových aplikací. ```mermaid mindmap root((Jednostránkové aplikace)) Architecture Template System Client-side Routing State Management Event Handling Templates Znovupoužitelné komponenty Dynamický obsah Manipulace s DOM Přepínání obsahu Routing Správa URL History API Navigační logika Integrace s prohlížečem User Experience Rychlá navigace Plynulé přechody Konzistentní stav Moderní interakce Performance Snížený počet požadavků na server Rychlejší přechody mezi stránkami Efektivní využití zdrojů Lepší odezva ``` ## Přednáškový kvíz [Přednáškový kvíz](https://ff-quizzes.netlify.app/web/quiz/41) ### Co budete potřebovat Budeme potřebovat lokální webový server pro testování naší bankovní aplikace – nebojte, je to jednodušší, než to zní! Pokud ještě nemáte žádný nastavený, stačí nainstalovat [Node.js](https://nodejs.org) a spustit `npx lite-server` z vašeho projektového adresáře. Tento praktický příkaz spustí lokální server a automaticky otevře vaši aplikaci v prohlížeči. ### Příprava Na počítači si vytvořte složku pojmenovanou `bank` s uvnitř souborem `index.html`. Začneme od tohoto HTML [boilerplate](https://en.wikipedia.org/wiki/Boilerplate_code): ```html Bank App ``` **Co tento boilerplate poskytuje:** - **Založení** struktury HTML5 dokumentu s řádným deklarováním DOCTYPE - **Nastavení** kódování znaků na UTF-8 pro podporu mezinárodního textu - **Povoluje** responzivní design díky meta tagu viewport pro kompatibilitu s mobily - **Určuje** popisný název, který se zobrazuje na kartě v prohlížeči - **Vytváří** čistou část těla, ve které budeme průběžně budovat aplikaci > 📁 **Náhled struktury projektu** > > **Na konci této lekce bude váš projekt obsahovat:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **Úlohy souborů:** > - **index.html**: Obsahuje všechny šablony a strukturu aplikace > - **app.js**: Řídí směrování, navigaci a správu šablon > - **Šablony**: Definují uživatelské rozhraní pro přihlášení, dashboard a další obrazovky --- ## HTML šablony Šablony řeší základní problém ve webovém vývoji. Když Gutenberg vynalezl pohyblivé tiskové znaky v 40. letech 15. století, uvědomil si, že místo vyřezávání celých stran může vytvářet znovupoužitelné bloky písmen a sestavovat je podle potřeby. HTML šablony fungují na stejném principu – místo vytváření samostatných HTML souborů pro každou obrazovku definujete znovupoužitelné struktury, které lze zobrazit podle potřeby. ```mermaid flowchart TD A["📋 Definice šablony"] --> B["💬 Skryté v DOM"] B --> C["🔍 JavaScript najde šablonu"] C --> D["📋 Klonování obsahu šablony"] D --> E["🔗 Připojit do viditelného DOM"] E --> F["👁️ Uživatel vidí obsah"] G["Šablona přihlášení"] --> A H["Šablona panelu"] --> A I["Budoucí šablony"] --> A style A fill:#e3f2fd style D fill:#e8f5e8 style F fill:#fff3e0 style B fill:#f3e5f5 ``` Přemýšlejte o šablonách jako o plánech pro různé části vaší aplikace. Stejně jako architekt vytvoří jeden plán a používá ho víckrát, místo aby stále znovu kreslil stejné místnosti, my vytvoříme šablony jednou a spustíme je podle potřeby. Prohlížeč tyto šablony drží skryté, dokud je JavaScript neaktivuje. Pokud chcete vytvořit více obrazovek pro webovou stránku, jedním řešením by bylo vytvořit jeden HTML soubor pro každou obrazovku, kterou chcete zobrazit. Toto řešení však přináší některá omezení: - Musíte stále znovu načítat celé HTML při přepínání obrazovek, což může být pomalé. - Sdílení dat mezi různými obrazovkami je obtížné. Dalším přístupem je mít pouze jeden HTML soubor a definovat více [HTML šablon](https://developer.mozilla.org/docs/Web/HTML/Element/template) pomocí elementu `