Skip to content

Commit 67d8034

Browse files
authored
Merge pull request #11 from AnastasiiaXX/module11-task1
2 parents fb77455 + 5d8f3f7 commit 67d8034

11 files changed

Lines changed: 239 additions & 175 deletions

js/api.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
const BASE_URL = 'https://31.javascript.htmlacademy.pro/kekstagram';
2+
3+
const Route = {
4+
GET_DATA: '/data',
5+
SEND_DATA: '/',
6+
};
7+
8+
const Method = {
9+
GET: 'GET',
10+
POST: 'POST',
11+
};
12+
13+
const load = (route, method = Method.GET, body = null) => fetch(`${BASE_URL}${route}`, { method, body})
14+
.then((response) => {
15+
if (!response.ok) {
16+
throw new Error(`Ошибка ${response.status}`);
17+
}
18+
return response.json();
19+
});
20+
21+
const getData = () => load(Route.GET_DATA);
22+
23+
const sendData = (formData) => load(Route.SEND_DATA, Method.POST, formData);
24+
25+
export { getData, sendData };

js/data.js

Lines changed: 0 additions & 49 deletions
This file was deleted.

js/generate-data.js

Lines changed: 0 additions & 34 deletions
This file was deleted.

js/image-filters.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const uploadedImage = form.querySelector('.img-upload__preview img');
1414
const effectRadios = form.querySelectorAll('input[name="effect"]');
1515
const inputValue = form.querySelector('.effect-level__value');
1616

17-
export const initImageEffects = () => {
17+
const initImageEffects = () => {
1818
let selectedFilter = 'none';
1919
noUiSlider.create(slider, {
2020
range: {
@@ -58,3 +58,12 @@ export const initImageEffects = () => {
5858
});
5959
});
6060
};
61+
62+
const resetImageEffects = () => {
63+
const noneRadioBtn = form.querySelector('input[value="none"]');
64+
noneRadioBtn.checked = true;
65+
sliderContainer.classList.add('hidden');
66+
uploadedImage.style.filter = '';
67+
};
68+
69+
export { resetImageEffects, initImageEffects};

js/image-scale.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const scaleControlValue = form.querySelector('.scale__control--value');
55
const uploadedImage = form.querySelector('.img-upload__preview img');
66

77
let currentScale = 100;
8-
export const initImageScale = () => {
8+
const initImageScale = () => {
99
scaleSmallerBtn.addEventListener('click', () => {
1010
if (currentScale > 25) {
1111
currentScale -= 25;
@@ -22,3 +22,11 @@ export const initImageScale = () => {
2222
}
2323
});
2424
};
25+
26+
const resetImageScale = () => {
27+
currentScale = 100;
28+
scaleControlValue.value = `${currentScale}%`;
29+
uploadedImage.style.transform = 'scale(1)';
30+
};
31+
32+
export { resetImageScale, initImageScale};

js/main.js

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,26 @@
11
import { renderThumbnails } from './thumbnails.js';
22
import { showFullPhoto } from './show-full-photo.js';
3-
import { initUploadForm } from './upload-form.js';
3+
import { initUploadForm, resetUploadForm } from './upload-form.js';
4+
import { getData } from './api';
5+
import { showDataError, showSuccessMessage, showErrorMessage } from './notifications.js';
6+
import { setUploadFormSubmit } from './upload-form.js';
47

5-
renderThumbnails();
6-
showFullPhoto();
78
initUploadForm();
9+
getData()
10+
.then((photos) => {
11+
renderThumbnails(photos);
12+
showFullPhoto(photos);
13+
})
14+
.catch((e)=> {
15+
showDataError(e);
16+
});
17+
18+
setUploadFormSubmit({
19+
onSuccess: () => {
20+
resetUploadForm();
21+
showSuccessMessage();
22+
},
23+
onError: () => {
24+
showErrorMessage();
25+
}
26+
});

js/notifications.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { isEscapeKey } from './helpers.js';
2+
3+
const ERROR_SHOW_TIME = 5000;
4+
5+
const dataErrorTemplate = document.querySelector('#data-error');
6+
const body = document.querySelector('body');
7+
const showDataError = () => {
8+
const template = dataErrorTemplate.content.cloneNode(true);
9+
const errorDiv = template.firstElementChild;
10+
body.append(template);
11+
setTimeout(() => {
12+
errorDiv.remove();
13+
}, ERROR_SHOW_TIME);
14+
};
15+
const showMessage = (templateId, buttonClass) => {
16+
let handleEscape = null;
17+
let handleOutsideClick = null;
18+
19+
const template = document.querySelector(templateId).content.cloneNode(true);
20+
const messageDiv = template.firstElementChild;
21+
const messageButton = messageDiv.querySelector(buttonClass);
22+
body.append(template);
23+
24+
const closeMessage = () => {
25+
messageDiv.remove();
26+
document.removeEventListener('keydown', handleEscape);
27+
messageDiv.removeEventListener('click', handleOutsideClick);
28+
};
29+
30+
handleEscape = (evt) => {
31+
if (isEscapeKey(evt)) {
32+
closeMessage();
33+
}
34+
};
35+
36+
handleOutsideClick = (evt) => {
37+
if (evt.target === messageDiv) {
38+
closeMessage();
39+
}
40+
};
41+
messageButton.addEventListener('click', closeMessage);
42+
document.addEventListener('keydown', handleEscape);
43+
messageDiv.addEventListener('click', handleOutsideClick);
44+
};
45+
46+
const showSuccessMessage = () => showMessage('#success', '.success__button');
47+
const showErrorMessage = () => showMessage('#error', '.error__button');
48+
49+
export { showDataError, showSuccessMessage, showErrorMessage };

js/show-full-photo.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { photos } from './generate-data';
21
import { closeModal, openModal } from './modal.js';
32
import { paginateComments } from './comments.js';
43

@@ -22,7 +21,7 @@ const fillPhotoData = (currentPhoto) => {
2221
comments.innerHTML = '';
2322
};
2423

25-
export const showFullPhoto = () => {
24+
export const showFullPhoto = (photos) => {
2625
const commentsLoaderBtn = document.querySelector('.comments-loader');
2726
const shownCommentsCount = document.querySelector('.social__comment-shown-count');
2827
pictureContainer.addEventListener('click', (evt) => {

js/thumbnails.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { photos } from './generate-data';
2-
export const renderThumbnails = () => {
1+
export const renderThumbnails = (photos) => {
32
const photoTemplate = document.querySelector('#picture').content;
43
const photoContainer = document.querySelector('.pictures');
54

0 commit comments

Comments
 (0)