Skip to content

Commit 22f0f03

Browse files
committed
[PROJ-18.8/compl] render-days-content-element
Adding render/re-render for "habbit-days/content" element. Worth noting: - inserting "Html/blocks" using/by "template strings/innerHTML". FS-dev: B-3 / JS basic
1 parent 8f42ca1 commit 22f0f03

File tree

2 files changed

+58
-27
lines changed
  • full-stack-dev/3-js-basic/18-proj-habit-tracker/18-8-render-days-content-element

2 files changed

+58
-27
lines changed

full-stack-dev/3-js-basic/18-proj-habit-tracker/18-8-render-days-content-element/index.html

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -48,25 +48,7 @@ <h1 class="content__title" id="header-title"></h1>
4848
</div>
4949
</header>
5050
<div class="habbit-days content__habbit-days" id="habbit-days">
51-
<ul class="habbit-days__list">
52-
<li class="habbit-days__item">
53-
<div class="habbit-days__label">День 1</div>
54-
<div class="habbit-days__comment-wrap">
55-
<div class="habbit-days__comment">Первый подход всегда даётся тяжело..</div>
56-
<button class="habbit-days__delete-btn" type="button" aria-label="Удалить день" title="Удалить день">
57-
<img class="habbit-days__delete-icon" src="./images/trash-icon.svg" width="24" height="24"
58-
alt="Иконка: Мусорное ведро">
59-
</button>
60-
</div>
61-
</li>
62-
<li class="habbit-days__item">
63-
<div class="habbit-days__label">День 2</div>
64-
<form class="habbit-days__form" id="comment-form">
65-
<input class="habbit-days__form-input" id="form-input" type="text" placeholder="Комментарий">
66-
<button class="habbit-days__form-btn" type="submit">Готово</button>
67-
</form>
68-
</li>
69-
</ul>
51+
<ul class="habbit-days__list" id="habbit-days-list"></ul>
7052
</div>
7153
</main>
7254
</div>

full-stack-dev/3-js-basic/18-proj-habit-tracker/18-8-render-days-content-element/js/index.js

Lines changed: 57 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ const app = {
1111
progressPercent: document.getElementById('progress-percent'),
1212
progressValue: document.getElementById('progress-value'),
1313
},
14+
'habbit-days': {
15+
list: document.getElementById('habbit-days-list'),
16+
},
1417
};
1518

1619
// ** utility **
@@ -29,10 +32,6 @@ function saveData() {
2932

3033
// ** render **
3134
function rerenderMenu(activeHabbit) {
32-
if (!activeHabbit) {
33-
return;
34-
}
35-
3635
for (const habbit of habbits) {
3736
const existed = document.querySelector(`[menu-habbit-id="${habbit.id}"]`); // определение/флаг.. есть уже элемент (создавался) или нет
3837

@@ -70,10 +69,6 @@ function rerenderMenu(activeHabbit) {
7069
}
7170

7271
function rerenderHeaderContentEl(activeHabbit) {
73-
if (!activeHabbit) {
74-
return;
75-
}
76-
7772
app.header.title.textContent = activeHabbit.title; // добавление/обновление заголовка
7873

7974
// подсчёт прогресса/выполнения (согласно "уже" отмеченных дней и "ранее" поставленной цели/дней)
@@ -89,11 +84,65 @@ function rerenderHeaderContentEl(activeHabbit) {
8984
);
9085
}
9186

87+
function rerenderHabbitDaysContentEl(activeHabbit) {
88+
app['habbit-days'].list.innerHTML = ''; // предварительная очистка списка (всё будет создаваться заново)
89+
90+
const docFragment = document.createDocumentFragment(); // создание промежуточного/специального контейнера (сразу в него.. потом уже в document)
91+
92+
// создание/отрисовка уже существующих дней (согласно массива days)
93+
for (let i = 0; i < activeHabbit.days.length; i++) {
94+
const habbitDaysItem = document.createElement('li');
95+
habbitDaysItem.classList.add('habbit-days__item');
96+
97+
habbitDaysItem.innerHTML = `<div class="habbit-days__label">День ${
98+
i + 1
99+
}</div>
100+
<div class="habbit-days__comment-wrap">
101+
<div class="habbit-days__comment">${activeHabbit.days[i].comment}</div>
102+
<button class="habbit-days__delete-btn" type="button" aria-label="Удалить день" title="Удалить день">
103+
<img class="habbit-days__delete-icon" src="./images/trash-icon.svg" width="24" height="24"
104+
alt="Иконка: Мусорное ведро">
105+
</button>
106+
</div>`;
107+
108+
docFragment.append(habbitDaysItem); // сразу добавление в "docFragment"
109+
}
110+
111+
// "отдельное" создание/отрисовка крайнего дня с комментарием (пустым)
112+
const habbitDaysCommentItem = document.createElement('li');
113+
habbitDaysCommentItem.classList.add(
114+
'habbit-days__item',
115+
'habbit-days__item-comment'
116+
);
117+
118+
habbitDaysCommentItem.innerHTML = `<div class="habbit-days__label">День ${
119+
activeHabbit.days.length + 1
120+
}</div>
121+
<form class="habbit-days__form" id="comment-form" onsubmit="addCommentDay(event)">
122+
<input class="habbit-days__form-input" id="form-input" type="text" placeholder="Комментарий">
123+
<button class="habbit-days__form-btn" type="submit">Готово</button>
124+
</form>`;
125+
126+
docFragment.append(habbitDaysCommentItem);
127+
app['habbit-days'].list.append(docFragment); // и всё за раз на страницу
128+
}
129+
92130
// поиск/определение "активной" привычки.. запуск отрисовок элементов/переключение активностей
93131
function rerender(activeHabbitId) {
94132
const activeHabbit = habbits.find((habbit) => habbit.id === activeHabbitId);
133+
134+
if (!activeHabbit) {
135+
return;
136+
}
137+
95138
rerenderMenu(activeHabbit);
96139
rerenderHeaderContentEl(activeHabbit);
140+
rerenderHabbitDaysContentEl(activeHabbit);
141+
}
142+
143+
// ** business **
144+
function addCommentDay(event) {
145+
event.preventDefault();
97146
}
98147

99148
// init

0 commit comments

Comments
 (0)