Skip to content

Commit f9a13da

Browse files
committed
improving the logic of displaying comments
1 parent 312215c commit f9a13da

File tree

2 files changed

+89
-28
lines changed

2 files changed

+89
-28
lines changed

js/comments.js

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import { DATA_ELEMENTS } from './photo-modal-elements.js';
2+
3+
const COMMENTS_PER_ITERATION = 5;
4+
5+
let currentPhotoComments = [];
6+
let shownCommentsCount = 0;
7+
8+
const renderNextComments = () => {
9+
const nextIterationOfComment = currentPhotoComments.slice(shownCommentsCount, shownCommentsCount + COMMENTS_PER_ITERATION);
10+
11+
shownCommentsCount += nextIterationOfComment.length;
12+
13+
const commentsFragment = document.createDocumentFragment();
14+
15+
nextIterationOfComment.forEach((comment) => {
16+
const newCommentsElement = DATA_ELEMENTS.commentTemplate.cloneNode(true);
17+
const avatar = newCommentsElement.querySelector('.social__picture');
18+
19+
avatar.src = comment.avatar;
20+
avatar.alt = comment.name;
21+
newCommentsElement.querySelector('.social__text').textContent = comment.message;
22+
23+
commentsFragment.append(newCommentsElement);
24+
});
25+
26+
DATA_ELEMENTS.commentsListElement.appendChild(commentsFragment);
27+
28+
DATA_ELEMENTS.commentShownCountElement.textContent = shownCommentsCount;
29+
30+
if (shownCommentsCount >= currentPhotoComments.length) {
31+
DATA_ELEMENTS.commentsLoaderElement.classList.add('hidden');
32+
}
33+
};
34+
35+
const closeComments = () => {
36+
shownCommentsCount = 0;
37+
currentPhotoComments = [];
38+
39+
DATA_ELEMENTS.commentsListElement.innerHTML = '';
40+
DATA_ELEMENTS.commentsLoaderElement.classList.add('hidden');
41+
42+
DATA_ELEMENTS.commentShownCountElement.textContent = '0';
43+
};
44+
45+
46+
const renderModal = ({ url, description, likes, comments }) => {
47+
DATA_ELEMENTS.bigPhotoImgElement.src = url;
48+
DATA_ELEMENTS.bigPhotoImgElement.alt = description;
49+
DATA_ELEMENTS.likesCountElement.textContent = likes;
50+
DATA_ELEMENTS.socialCaptionElement.textContent = description;
51+
52+
closeComments();
53+
currentPhotoComments = comments;
54+
DATA_ELEMENTS.commentTotalCountElement.textContent = comments.length;
55+
DATA_ELEMENTS.commentCountBlockElement.classList.remove('hidden');
56+
DATA_ELEMENTS.commentsLoaderElement.classList.remove('hidden');
57+
58+
renderNextComments();
59+
};
60+
61+
const initComments = (comments) => {
62+
closeComments();
63+
currentPhotoComments = comments;
64+
65+
DATA_ELEMENTS.commentTotalCountElement.textContent = comments.length;
66+
DATA_ELEMENTS.commentCountBlockElement.classList.remove('hidden');
67+
DATA_ELEMENTS.commentsLoaderElement.classList.remove('hidden');
68+
69+
renderNextComments();
70+
};
71+
72+
export {
73+
renderNextComments,
74+
closeComments,
75+
initComments,
76+
currentPhotoComments,
77+
shownCommentsCount
78+
};

js/render-full-size-photo.js

Lines changed: 11 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { isEscapeKey } from './util.js';
22
import { DATA_ELEMENTS } from './photo-modal-elements.js';
3+
import { renderNextComments, closeComments, initComments } from './comments.js';
34

45
const onDocumentKeydown = (evt) => {
56
if (isEscapeKey(evt)) {
@@ -12,40 +13,21 @@ const showModal = (isShown = true) => {
1213
if (isShown) {
1314
DATA_ELEMENTS.photoModalElement.classList.remove('hidden');
1415
document.body.classList.add('modal-open');
15-
} else {
16-
DATA_ELEMENTS.photoModalElement.classList.add('hidden');
17-
document.body.classList.remove('modal-open');
16+
return;
1817
}
19-
};
2018

21-
const renderComments = (comments) => {
22-
const commentsFragment = document.createDocumentFragment();
23-
comments.forEach((comment) => {
24-
const newCommentsElement = DATA_ELEMENTS.commentTemplate.cloneNode(true);
25-
const avatar = newCommentsElement.querySelector('.social__picture');
26-
avatar.src = comment.avatar;
27-
avatar.alt = comment.name;
28-
newCommentsElement.querySelector('.social__text').textContent = comment.message;
29-
commentsFragment.append(newCommentsElement);
30-
});
31-
DATA_ELEMENTS.commentsListElement.appendChild(commentsFragment);
19+
DATA_ELEMENTS.photoModalElement.classList.add('hidden');
20+
document.body.classList.remove('modal-open');
3221
};
3322

34-
const renderModal = (({ url, description, likes, comments}) => {
23+
const renderModal = ({ url, description, likes, comments }) => {
3524
DATA_ELEMENTS.bigPhotoImgElement.src = url;
3625
DATA_ELEMENTS.bigPhotoImgElement.alt = description;
3726
DATA_ELEMENTS.likesCountElement.textContent = likes;
3827
DATA_ELEMENTS.socialCaptionElement.textContent = description;
3928

40-
DATA_ELEMENTS.commentsListElement.innerHTML = '';
41-
42-
DATA_ELEMENTS.commentShownCountElement.textContent = comments.length;
43-
DATA_ELEMENTS.commentTotalCountElement.textContent = comments.length;
44-
DATA_ELEMENTS.commentCountBlockElement.classList.add('hidden');
45-
DATA_ELEMENTS.commentsLoaderElement.classList.add('hidden');
46-
47-
renderComments(comments);
48-
});
29+
initComments(comments);
30+
};
4931

5032
const openPhotoModal = (photo) => {
5133
showModal();
@@ -56,10 +38,11 @@ const openPhotoModal = (photo) => {
5638
const closePhotoModal = () => {
5739
showModal(false);
5840
document.removeEventListener('keydown', onDocumentKeydown);
41+
closeComments();
5942
};
6043

61-
DATA_ELEMENTS.photoModalCloseElement.addEventListener('click', () => {
62-
closePhotoModal();
63-
});
44+
DATA_ELEMENTS.photoModalCloseElement.addEventListener('click', closePhotoModal);
45+
DATA_ELEMENTS.commentsLoaderElement.addEventListener('click', renderNextComments);
6446

6547
export { openPhotoModal, closePhotoModal };
48+

0 commit comments

Comments
 (0)