Skip to content

Commit a9ca30e

Browse files
authored
Merge pull request #7 from AnastasiiaXX/module8-task1
2 parents fffc4e1 + 2c25230 commit a9ca30e

5 files changed

Lines changed: 88 additions & 0 deletions

File tree

js/helpers.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,5 @@ export const checkWorkingTime = (workDayStart, workDayEnd, meetingStartTime, mee
5454

5555
return meetingStart >= workStart && meetingEnd <= workEnd;
5656
};
57+
58+
export const isEscapeKey = (evt) => evt.key === 'Escape';

js/main.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import { renderThumbnails } from './thumbnails.js';
2+
import { showFullPhoto } from './show-full-photo.js';
23

34
renderThumbnails();
5+
showFullPhoto();
46

js/modal.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { isEscapeKey } from './helpers.js';
2+
let currentHandler = null;
3+
4+
export const closeModal = (modalElement, bodyElement) => {
5+
modalElement.classList.add('hidden');
6+
bodyElement.classList.remove('modal-open');
7+
document.removeEventListener('keydown', currentHandler);
8+
};
9+
export const openModal = (modalElement, bodyElement) => {
10+
currentHandler = (evt) => {
11+
if (isEscapeKey(evt)) {
12+
evt.preventDefault();
13+
closeModal(modalElement, bodyElement);
14+
}
15+
};
16+
modalElement.classList.remove('hidden');
17+
bodyElement.classList.add('modal-open');
18+
document.addEventListener('keydown', currentHandler);
19+
};

js/show-full-photo.js

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import { createPhotos } from './generate-data';
2+
import { closeModal, openModal } from './modal.js';
3+
4+
const fullPhotoModal = document.querySelector('.big-picture');
5+
const comments = document.querySelector('.social__comments');
6+
const body = document.querySelector('body');
7+
const closeModalButton = document.querySelector('.big-picture__cancel');
8+
9+
const renderComments = (mockedComments) => {
10+
mockedComments.forEach((commentData) => {
11+
const comment = document.createElement('li');
12+
const avatar = document.createElement('img');
13+
const commentText = document.createElement('p');
14+
15+
comment.classList.add('social__comment');
16+
avatar.classList.add('social__picture');
17+
avatar.alt = commentData.name;
18+
avatar.src = commentData.avatar;
19+
avatar.width = 35;
20+
avatar.height = 35;
21+
commentText.classList.add('social__text');
22+
commentText.textContent = commentData.message;
23+
24+
comment.append(avatar);
25+
comment.append(commentText);
26+
27+
comments.append(comment);
28+
});
29+
};
30+
31+
const fillPhotoData = (currentPhoto) => {
32+
const fullPhotoImage = document.querySelector('.big-picture__img img');
33+
const fullPhotoDescription = document.querySelector('.social__caption');
34+
const fullPhotoLikes = document.querySelector('.likes-count');
35+
const shownCommentsCount = document.querySelector('.social__comment-shown-count');
36+
fullPhotoImage.src = currentPhoto.url;
37+
fullPhotoImage.alt = currentPhoto.description;
38+
fullPhotoLikes.textContent = currentPhoto.likes;
39+
fullPhotoDescription.textContent = currentPhoto.description;
40+
shownCommentsCount.textContent = currentPhoto.comments.length;
41+
comments.innerHTML = '';
42+
renderComments(currentPhoto.comments);
43+
};
44+
45+
export const showFullPhoto = () => {
46+
const photos = createPhotos();
47+
const thumbnails = document.querySelectorAll('.picture');
48+
const commentsCount = document.querySelector('.social__comment-count');
49+
const commentsLoaderBtn = document.querySelector('.comments-loader');
50+
51+
thumbnails.forEach((thumbnail) => {
52+
thumbnail.addEventListener('click', () => {
53+
openModal(fullPhotoModal, body);
54+
commentsCount.classList.add('hidden');
55+
commentsLoaderBtn.classList.add('hidden');
56+
const photoId = Number(thumbnail.dataset.id);
57+
const currentPhoto = photos.find((photo) => photo.id === photoId);
58+
fillPhotoData(currentPhoto);
59+
});
60+
});
61+
62+
closeModalButton.addEventListener('click', () => closeModal(fullPhotoModal, body));
63+
};

js/thumbnails.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ export const renderThumbnails = () => {
77

88
const renderPhoto = (element) => {
99
const newPhotoTemplate = photoTemplate.cloneNode(true);
10+
const link = newPhotoTemplate.querySelector('a');
11+
link.dataset.id = element.id;
1012
const image = newPhotoTemplate.querySelector('.picture__img');
1113
image.src = element.url;
1214
image.alt = element.description;

0 commit comments

Comments
 (0)