Skip to content

Commit 4743b3f

Browse files
committed
[PROJ-18.17/compl] refactoring-dry-readme
Filling README.md file. FS-dev: B-3 / JS basic
1 parent ffff46d commit 4743b3f

File tree

1 file changed

+109
-0
lines changed
  • full-stack-dev/3-js-basic/18-proj-habit-tracker/18-17-refactoring-dry-readme

1 file changed

+109
-0
lines changed
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
# Трекер привычек (Habbit tracker)
2+
3+
### Описание проекта
4+
5+
Данный проект представляет собой интерактивное одностраничное приложение (SPA) "Трекер привычек". Он создан как финальный проект для курса по основам JavaScript. Приложение позволяет пользователям создавать, отслеживать и удалять свои привычки, отмечая ежедневный прогресс.
6+
7+
Проект полностью построен на "чистом" **JavaScript (Vanilla JS)**, который управляет всем состоянием, рендерингом и взаимодействием с пользователем. Данные хранятся локально в **LocalStorage**, что обеспечивает их сохранность между сессиями.
8+
9+
[🔗 Демо-версия на GitHub Pages](https://matowdev.github.io/purple-school/full-stack-dev/3-js-basic/18-proj-habit-tracker/18-17-refactoring-dry-readme)
10+
11+
---
12+
13+
### Функциональность
14+
15+
- **Создание и удаление привычек**: Пользователи могут добавлять новые привычки через модальное окно (pop-up), указывая название, цель (в днях) и выбирая иконку.
16+
- **Отслеживание прогресса**: Для каждой привычки можно ежедневно добавлять комментарий, который фиксирует "выполненный день".
17+
- **Удаление дней**: Реализована возможность удалять отдельные дни из прогресса привычки.
18+
- **Динамический интерфейс (UI)**: Приложение полностью динамическое. Выбор привычки в боковой панели, добавление/удаление дней или целых привычек немедленно обновляет основной контент (заголовок, прогресс-бар, список дней) без перезагрузки страницы.
19+
- **Хранение данных (Persistence)**: Все данные о привычках и их прогрессе сохраняются в `localStorage` браузера.
20+
- **Навигация по URL**: Активная привычка запоминается в URL с помощью хеша (`#`), что позволяет делиться ссылкой на конкретную привычку и восстанавливать состояние при перезагрузке страницы.
21+
- **Валидация форм**: Формы добавления привычки и добавления дня имеют базовую валидацию на заполненность полей.
22+
23+
---
24+
25+
### Внешний вид страницы
26+
27+
![Habbit Tracker](https://github.com/matowdev/purple-school/blob/main/full-stack-dev/3-js-basic/18-proj-habit-tracker/18-17-refactoring-dry-readme/images/final-app-view.png?raw=true)
28+
29+
---
30+
31+
### Используемые технологии
32+
33+
- **HTML5**: Для создания семантической структуры SPA ( `<aside>`, `<main>`, `<header>` и т.д.).
34+
- **CSS3**: Для стилизации всех элементов. Ключевые особенности использования:
35+
- **CSS Custom Properties (переменные)** для централизованного управления палитрой, шрифтами и размерами (`variables.css`).
36+
- **Flexbox** для построения адаптивной сетки и выравнивания.
37+
- **Модульная структура**: Стили разделены на файлы по компонентам (`sidebar.css`, `content.css`, `pop-up.css` и т.д.).
38+
- **JavaScript (ES6+ / Vanilla JS)**: Ядро всего приложения. JavaScript отвечает за:
39+
- **Управление состоянием (State Management)**: Хранение и изменение основного массива данных `habbits`.
40+
- **DOM Manipulation**: Полный рендеринг и обновление DOM-дерева (`createElement`, `innerHTML`, `append`).
41+
- **Обработка событий (Event Handling)**: Использование `onclick`, `onsubmit` и `addEventListener` для всей интерактивности.
42+
- **Работа с LocalStorage**: Сохранение (`saveData`) и загрузка (`loadData`) состояния приложения.
43+
44+
---
45+
46+
### Структура кода
47+
48+
#### Основные принципы кода:
49+
50+
- **State-Driven UI**: Весь интерфейс перерисовывается функцией `rerender()` (и её хелперами `rerenderMenu`, `rerenderHeaderContentEl` и т.д.), которая опирается на текущее состояние глобального массива `habbits`.
51+
- **Модульность JS**: Код в `index.js` логически разделен на блоки:
52+
- `// ** utility **` (вспомогательные функции, н-р, `loadData`, `saveData`).
53+
- `// ** render **` (функции, отвечающие за отрисовку UI).
54+
- `// ** business **` (основная логика приложения: `addCommentDay`, `deleteHabbit` и т.д.).
55+
- `// init` (инициализация приложения при загрузке).
56+
- **Кэширование DOM-элементов**: Ключевые узлы DOM, которые часто используются, один раз находятся и сохраняются в объекте `app` для быстрого доступа.
57+
- **Именование по БЭМ**: Для CSS-классов используется строгая БЭМ-методология (Блок, Элемент, Модификатор). Это делает компоненты независимыми, легко переиспользуемыми и значительно повышает читаемость кода.
58+
- **Модульность CSS**: Стили импортируются в один главный файл `style.css` через директиву `@import`.
59+
60+
#### Основные файлы и папки:
61+
62+
```
63+
habbit-tracker/
64+
│── css/ # Стили:
65+
│ ├── variables.css # CSS переменные (цвета, шрифты)
66+
│ ├── page.css # Глобальные стили страницы
67+
│ ├── app.css # Стили основного layout
68+
│ ├── sidebar.css # Стили боковой панели
69+
│ ├── content.css # Стили контентной части
70+
│ ├── progress-bar.css # Стили прогресс-бара
71+
│ ├── habbit-days.css # Стили списка дней
72+
│ ├── pop-up.css # Стили модального окна
73+
│ └── style.css # Главный импортирующий файл
74+
75+
│── images/ # Иконки, логотипы и favicon
76+
77+
│── js/
78+
│ └── index.js # Весь JavaScript код приложения
79+
80+
│── index.html # HTML-структура приложения
81+
└── README.md # Это описание проекта
82+
```
83+
84+
---
85+
86+
### На что обратить внимание?
87+
88+
1. **Чистый JavaScript**: Проект демонстрирует, как создать полноценное SPA (Single Page Application) без использования каких-либо фреймворков (React, Vue и т.д.).
89+
2. **Управление состоянием**: Вся логика построена вокруг манипуляций с массивом `habbits`. Функции `map` и `filter` активно используются для не-мутирующего обновления состояния (хотя в `deleteCommentDay` используется `splice` для мутации).
90+
3. **Динамический рендеринг**: Вместо того чтобы скрывать/показывать элементы, приложение _перерисовывает_ контентные блоки (`rerenderMenu`, `rerenderHabbitDaysContentEl`) на основе актуальных данных.
91+
4. **Работа с LocalStorage**: Проект показывает простой, но надежный способ сохранения данных пользователя между сеансами.
92+
5. **Инициализация (IIFE)**: При загрузке страницы немедленно-вызываемая функция (`IIFE`) в `index.js` (`(() => { ... })();`) определяет, что нужно показать пользователю: "пустое состояние", привычку из `localStorage` или привычку из URL-хеша.
93+
94+
---
95+
96+
### Запуск проекта
97+
98+
Поскольку это статический сайт, для его запуска не требуется сервер.
99+
100+
```sh
101+
# Просто откройте файл index.html в вашем браузере
102+
open index.html
103+
```
104+
105+
---
106+
107+
### Заключение
108+
109+
Этот проект является отличным примером "клиентского" приложения, написанного на чистом JavaScript. Он охватывает фундаментальные концепции front-end разработки: управление состоянием, манипуляция DOM, обработка событий и сохранение данных в браузере.

0 commit comments

Comments
 (0)