# Израда банковне апликације део 1: HTML шаблони и руте у веб апликацији ```mermaid journey title Ваш пут развоја банкарске апликације section Основе SPA Разумети апликације једне странице: 3: Student Учити концепте шаблона: 4: Student Савладати манипулацију DOM-ом: 4: Student section Системи рутирања Имплементирати рутирање на страни клијента: 4: Student Управљати историјом прегледача: 5: Student Креирати системе навигације: 5: Student section Професионални обрасци Градити модуларну архитектуру: 5: Student Примeњивати добре праксе: 5: Student Креирати корисничка искуства: 5: Student ``` Када је оријентациони рачунар Аполо 11 навигационо усмеравао на Месец 1969. године, морао је да пребацује између различитих програма без поновног покретања целог система. Савремене веб апликације функционишу слично – промене оно што видите без поновног учитавања свега из почетка. Ово ствара глатко, одзивно искуство које корисници данас очекују. За разлику од традиционалних сајтова који поново учитавају целе странице за сваку интеракцију, модерне веб апликације ажурирају само делове који захтевају промену. Овај приступ, баш као што контрола мисије пребацује између различитих приказа уз одржавање константне комуникације, ствара оно течемо искуство које смо навикли да очекујемо. Ево шта прави драматичну разлику: | Традиционалне мултипејџ апликације | Модерне једнопејџ апликације | |----------------------------|-------------------------| | **Навигација** | Поновно учитавање целе странице за сваки екран | Инстантно пребацивање садржаја | | **Перформансе** | Спорије због потпуног преузимања HTML-а | Брже са делимичним ажурирањима | | **Корисничко искуство** | Непријатни поздравни флеџеви на страници | Глатки, апликацијски прелази | | **Дељење података** | Тешко између страница | Лако управљање стањем | | **Развој** | Више HTML фајлова за одржавање | Један HTML са динамичким шаблонима | **Разумевање еволуције:** - **Традиционалне апликације** захтевају упите серверу за сваки корак навигације - **Модерне Једнопејџ апликације (СПА)** учитавају једном и динамички мењају садржај користећи JavaScript - **Корисничка очекивања** сада фаворизују тренутне и беспрекорне интеракције - **Предности перформанси** укључују смањени саобраћај и брже одговоре У овој лекцији, направићемо банковну апликацију са више екрана који се беспрекорно надовезују. Баш као што научници користе модуларне инструменте који се могу реконфигурисати за различите експерименте, користићемо HTML шаблоне као поновно употребљиве компоненте које могу бити приказане по потреби. Радићете са HTML шаблонима (поновно употребљивим плановима за различите екране), JavaScript рутингом (систем који пребацује између екрана), и API-јем историје прегледача (који омогућава да дугме назад функционише како треба). Ово су исте фундаменталне технике које користе оквири као што су React, Vue, и Angular. До краја, имаћете радну банковну апликацију која демонстрира професионалне принципе једнопејџ апликације. ```mermaid mindmap root((Јединствене апликације са једном страницом)) Architecture Template System Client-side Routing State Management Event Handling Templates Reusable Components Dynamic Content DOM Manipulation Content Switching Routing Управљање УРЛ-ом History API Логика навигације Интеграција претраживача User Experience Брза навигација Глатке транзиције Конзистентно стање Модерне интеракције Performance Смањени захтеви ка серверу Брже прелазе странице Ефикасна употреба ресурса Боља одзивност ``` ## Пре теста предавања [Тест предавања](https://ff-quizzes.netlify.app/web/quiz/41) ### Шта ћете морати имати Потребан нам је локални веб сервер да бисмо тестирали нашу банковну апликацију – не брините, лакше је него што звучи! Ако већ немате један постављен, само инсталирајте [Node.js](https://nodejs.org) и покрените `npx lite-server` из вашег пројект фолдера. Ова корисна команда покреће локални сервер и аутоматски отвара вашу апликацију у прегледачу. ### Припрема На вашем рачунару направите фасциклу под називом `bank` у коју убаците фајл по имену `index.html`. Почећемо са овим HTML [бојлерплејтом](https://en.wikipedia.org/wiki/Boilerplate_code): ```html Bank App ``` **Ово што овај бојлерплејт обезбеђује:** - **Успоставља** HTML5 структуру документа са правилном DOCTYPE декларацијом - **Конфигурише** енкодирање карактера као UTF-8 за међународну подршку текста - **Омогућава** респонзивни дизајн преко viewport meta тега за мобилне уређаје - **Поставља** описни наслов који се појављује на табу прегледача - **Креира** чисто тело странице где ћемо градити нашу апликацију > 📁 **Преглед структуре пројекта** > > **До краја ове лекције, ваш пројекат ће садржати:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **Одговорности фајлова:** > - **index.html**: Садржи све шаблоне и пружа структуру апликације > - **app.js**: Управља рутирањем, навигацијом и управљањем шаблонима > - **Шаблони**: Дефинишу кориснички интерфејс за пријаву, контролни панел и остале екране --- ## HTML Шаблони Шаблони решавају фундаментални проблем у веб развоју. Када је Гутенберг измислио покретни сликовни тип штампе 1440-их, схватио је да уместо вађења целих страна, може да направи поновно употребљиве словне блокове и распоређује их по потреби. HTML шаблони раде по истом принципу – уместо да стварате посебне HTML фајлове за сваки екран, дефинишете поновно употребљиве структуре које се могу приказати по потреби. ```mermaid flowchart TD A["📋 Дефиниција шаблона"] --> B["💬 Сакривено у DOM-у"] B --> C["🔍 JavaScript пронађе шаблон"] C --> D["📋 Клонирај садржај шаблона"] D --> E["🔗 Привежи за видљиви DOM"] E --> F["👁️ Корисник види садржај"] G["Шаблон за пријаву"] --> A H["Шаблон контролне табле"] --> A I["Будући шаблони"] --> A style A fill:#e3f2fd style D fill:#e8f5e8 style F fill:#fff3e0 style B fill:#f3e5f5 ``` Размислите о шаблонима као о плановима за различите делове ваше апликације. Баш као што архитекта направи један план и користи га више пута уместо да поново црта идентичне просторије, ми једном креирамо шаблоне и инстанцирамо их по потреби. Прегледач држи ове шаблоне скривеним док их JavaScript не активира. Ако желите да направите више екрана за једну веб страницу, једно од решења било би да направите један HTML фајл за сваки екран који желите да прикажете. Међутим, то решење има неколико непријатности: - Морате поново учитавати цео HTML када прелазите са екрана на екран, што може бити споро. - Тешко је делити податке између различитих екрана. Други приступ је да имате само један HTML фајл и дефинишете више [HTML шаблона](https://developer.mozilla.org/docs/Web/HTML/Element/template) користећи елемент `