Skip to content

Commit be50b60

Browse files
переделывает логику открытия большого изображения для открытия через обрабочик на контейнере всех изображений
1 parent 20ca233 commit be50b60

File tree

4 files changed

+42
-27
lines changed

4 files changed

+42
-27
lines changed

js/image-upload.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ const imageUploadSubmitHandler = async (evt) => {
9595
try {
9696
const formData = new FormData(evt.target);
9797
blockSubmitButton();
98-
await uploadData(formData);
98+
uploadData(formData);
9999
pristine.reset();
100100
} catch (error) {
101101
showError();
@@ -106,11 +106,11 @@ const imageUploadSubmitHandler = async (evt) => {
106106
imageUploadCloseButton.removeEventListener('click', uploadFormCloseHandler);
107107
};
108108

109-
const setImageUploadFormSubmit = () => {
109+
const initForm = () => {
110110
imageUploadForm.addEventListener('submit', imageUploadSubmitHandler);
111111
};
112112

113113
pristine.addValidator(imageUploadForm.querySelector('.text__hashtags'), validateAllHashtags, validateHashtagError);
114114
pristine.addValidator(imageUploadForm.querySelector('.text__description'), validateComment, validationCommentError);
115115

116-
export { setImageUploadFormSubmit, uploadFormCloseHandler, unblockSubmitButton, documentKeydownHandler};
116+
export { initForm, uploadFormCloseHandler, unblockSubmitButton, documentKeydownHandler};

js/main.js

+17-11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { renderPictures } from './pictures-preview-loader.js';
1+
import { renderPictures, setPicturesContainerClickHandler } from './pictures-preview-loader.js';
22
import { loadData, showError } from './api.js';
3-
import { setImageUploadFormSubmit } from './image-upload.js';
3+
import { initForm } from './image-upload.js';
44
import { showFilter, setFilterClickHandler } from './image-filtration.js';
55

66
import './show-image-fullscreen.js';
@@ -9,13 +9,19 @@ import './image-scaling.js';
99
import './image-effect.js';
1010
import './image-filtration.js';
1111

12-
try {
13-
const picturesObjects = await loadData();
14-
renderPictures(picturesObjects);
15-
showFilter();
16-
setFilterClickHandler(picturesObjects);
17-
} catch {
18-
showError();
19-
}
2012

21-
setImageUploadFormSubmit();
13+
const init = async () => {
14+
try {
15+
const picturesData = await loadData();
16+
renderPictures(picturesData);
17+
setPicturesContainerClickHandler(picturesData);
18+
showFilter();
19+
setFilterClickHandler(picturesData);
20+
} catch {
21+
showError();
22+
}
23+
};
24+
25+
init();
26+
initForm();
27+

js/pictures-preview-loader.js

+16-8
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,32 @@ const renderPictures = (usersPictures) => {
1313
const existingPictures = picturesContainer.querySelectorAll('.picture');
1414
existingPictures.forEach((picture) => picture.remove());
1515

16-
usersPictures.forEach(({ url, description, likes, comments }) => {
16+
usersPictures.forEach(({ id, url, description, likes, comments }) => {
1717
const pictureElement = pictureTemplate.cloneNode(true);
1818

19+
pictureElement.dataset.id = id;
1920
pictureElement.querySelector('.picture__img').src = url;
2021
pictureElement.querySelector('.picture__img').alt = description;
2122
pictureElement.querySelector('.picture__likes').textContent = likes;
2223
pictureElement.querySelector('.picture__comments').textContent = comments.length;
2324

24-
pictureElement.addEventListener('click', (evt) => {
25-
evt.preventDefault();
26-
openPicturePopup(url, description, likes, comments);
27-
});
28-
2925
picturesFragment.appendChild(pictureElement);
30-
3126
});
3227

3328
picturesContainer.appendChild(picturesFragment);
3429
};
3530

36-
export { picturesContainer, renderPictures};
31+
const setPicturesContainerClickHandler = (pictures) => {
32+
picturesContainer.addEventListener('click', (evt) => {
33+
const currentPictureNode = evt.target.closest('.picture');
34+
const currentPictureNodeId = currentPictureNode.dataset.id;
35+
36+
const currentPicture = pictures.find((picture) => picture.id === Number(currentPictureNodeId));
37+
38+
if (currentPicture) {
39+
openPicturePopup(currentPicture);
40+
}
41+
});
42+
};
43+
44+
export { picturesContainer, renderPictures, setPicturesContainerClickHandler };

js/show-image-fullscreen.js

+6-5
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,17 @@ function closePicturePopup() {
2727
document.removeEventListener('keydown', documentKeydownHandler);
2828
}
2929

30-
const openPicturePopup = (url, description, likes, comments) => {
30+
const openPicturePopup = (pictureData) => {
3131
document.body.classList.add('modal-open');
3232

3333
picture.classList.remove('hidden');
34-
picture.querySelector('img').src = url;
35-
pictureLikesCount.textContent = likes;
36-
pictureDescription.textContent = description;
34+
35+
picture.querySelector('img').src = pictureData.url;
36+
pictureLikesCount.textContent = pictureData.likes;
37+
pictureDescription.textContent = pictureData.description;
3738
pictureCloseButton.addEventListener('click', closePicturePopup);
3839

39-
showComments(comments);
40+
showComments(pictureData.comments);
4041

4142
document.addEventListener('keydown', documentKeydownHandler);
4243
};

0 commit comments

Comments
 (0)