Skip to content

Commit e84e0a9

Browse files
authored
Merge pull request #17 from Ocupuc123/master
2 parents a85839c + c3f7fa8 commit e84e0a9

3 files changed

Lines changed: 70 additions & 53 deletions

File tree

js/filter.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ const filterButtons = filters.querySelectorAll('.img-filters__button');
88

99
const FilterType = {
1010
RANDOM: 'filter-random',
11-
DISCUSSED: 'filter-discussed'
11+
DISCUSSED: 'filter-discussed',
12+
DEFAULT: 'filter-default'
1213
};
1314

1415
const filterRandom = (photos) => {
@@ -38,7 +39,14 @@ const sortPhotos = (photos, filterType) => {
3839
const setFilter = (cb, photos) => {
3940
filters.classList.remove('img-filters--inactive');
4041

42+
let currentAppliedFilterType = FilterType.DEFAULT;
43+
4144
const updateFilter = (filterType) => {
45+
if (filterType === currentAppliedFilterType) {
46+
return;
47+
}
48+
49+
currentAppliedFilterType = filterType;
4250
const sortedPhotos = sortPhotos(photos, filterType);
4351
cb(sortedPhotos);
4452
};

js/upload-image.js

Lines changed: 6 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { isEscapeKey, showErrorAlert } from './util.js';
1+
import { isEscapeKey, showErrorAlert, showPopupMessage } from './util.js';
22
import { validateReset } from './form.js';
33
import { sendData } from './api.js';
44

@@ -75,40 +75,6 @@ let slider = null;
7575
let currentEffect = 'none';
7676
let currentScale = parseFloat(uploadScaleControlInput.value);
7777

78-
const showAlert = (type) => {
79-
const fragment = document.querySelector(`#${type}`).content;
80-
const alert = fragment.querySelector(`.${type}`).cloneNode(true);
81-
const alertCloseButton = alert.querySelector(`.${type}__button`);
82-
83-
const onDocumentKeydown = (evt) => {
84-
if (isEscapeKey(evt)) {
85-
evt.preventDefault();
86-
closeAlert();
87-
}
88-
};
89-
90-
const onDocumentClick = (evt) => {
91-
if (!evt.target.closest(`.${type}__inner`)) {
92-
closeAlert();
93-
}
94-
};
95-
96-
const onAlertCloseButtonClick = () => {
97-
closeAlert();
98-
};
99-
100-
function closeAlert() {
101-
alert.remove();
102-
document.removeEventListener('keydown', onDocumentKeydown);
103-
document.removeEventListener('click', onDocumentClick);
104-
}
105-
106-
alertCloseButton.addEventListener('click', onAlertCloseButtonClick);
107-
document.addEventListener('keydown', onDocumentKeydown);
108-
document.addEventListener('click', onDocumentClick);
109-
body.appendChild(alert);
110-
};
111-
11278
const applyFilterEffect = (effect, value) => `${effectConfig[effect]?.property}(${parseFloat(value)}${effectConfig[effect]?.unit})`;
11379

11480
const applyTransformScale = (value) => `scale(${parseFloat(value) / 100})`;
@@ -124,11 +90,7 @@ const onScaleControlClick = (direction) => {
12490
uploadPreview.style.transform = applyTransformScale(currentScale);
12591
};
12692

127-
const onDocumentKeydownUpload = (evt) => {
128-
if (document.querySelector('.success') || document.querySelector('.error')) {
129-
return;
130-
}
131-
93+
const onDocumentKeydown = (evt) => {
13294
if (isEscapeKey(evt)) {
13395
evt.preventDefault();
13496
closeUpload();
@@ -147,10 +109,10 @@ const onFormSubmit = async (data) => {
147109

148110
if (request) {
149111
closeUpload();
150-
showAlert('success');
112+
showPopupMessage('success');
151113
}
152114
} catch {
153-
showAlert('error');
115+
showPopupMessage('error');
154116
}
155117

156118
toggleSubmitButton(false);
@@ -229,7 +191,7 @@ const openUpload = () => {
229191
uploadOverlay.classList.remove('hidden');
230192
checkEffectSliderVisibility('none');
231193

232-
document.addEventListener('keydown', onDocumentKeydownUpload);
194+
document.addEventListener('keydown', onDocumentKeydown);
233195
} else {
234196
showErrorAlert('Неверный тип файла');
235197
}
@@ -258,7 +220,7 @@ function closeUpload() {
258220
body.classList.remove('modal-open');
259221
uploadOverlay.classList.add('hidden');
260222

261-
document.removeEventListener('keydown', onDocumentKeydownUpload);
223+
document.removeEventListener('keydown', onDocumentKeydown);
262224
}
263225

264226
export { setUpload, onFormSubmit };

js/util.js

Lines changed: 55 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,74 @@ const errorFragment = document.querySelector('#data-error').content;
55
const errorTemplate = errorFragment.querySelector('.data-error');
66
const body = document.body;
77

8+
let currentPopup = null;
9+
10+
const isEscapeKey = (evt) => evt.key === 'Escape';
11+
812
const showErrorAlert = (message) => {
913
const alert = errorTemplate.cloneNode(true);
10-
const title = alert.querySelector('.data-error__title');
14+
const alertTitle = alert.querySelector('.data-error__title');
1115

12-
title.textContent = message;
16+
alertTitle.textContent = message;
1317
body.appendChild(alert);
1418

1519
setTimeout(() => {
1620
alert.remove();
1721
}, ALERT_SHOW_TIME);
1822
};
1923

20-
const isEscapeKey = (evt) => evt.key === 'Escape';
24+
const showPopupMessage = (type) => {
25+
if (currentPopup) {
26+
return;
27+
}
28+
29+
const fragment = document.querySelector(`#${type}`).content;
30+
const popup = fragment.querySelector(`.${type}`).cloneNode(true);
31+
const popupCloseButton = popup.querySelector(`.${type}__button`);
32+
33+
const onDocumentClick = (evt) => {
34+
if (!evt.target.closest(`.${type}__inner`)) {
35+
closePopup();
36+
}
37+
};
38+
39+
const onDocumentKeydown = (evt) => {
40+
if (isEscapeKey(evt)) {
41+
evt.preventDefault();
42+
closePopup();
43+
}
44+
};
2145

22-
function debounce(callback, timeoutDelay = DEFAULT_DELAY) {
46+
const onPopupCloseButtonClick = () => {
47+
closePopup();
48+
};
49+
50+
function closePopup() {
51+
if (!currentPopup) {
52+
return;
53+
}
54+
55+
popup.remove();
56+
document.removeEventListener('click', onDocumentClick);
57+
document.removeEventListener('keydown', onDocumentKeydown);
58+
currentPopup = null;
59+
}
60+
61+
popupCloseButton.addEventListener('click', onPopupCloseButtonClick);
62+
document.addEventListener('click', onDocumentClick);
63+
document.addEventListener('keydown', onDocumentKeydown);
64+
body.appendChild(popup);
65+
66+
currentPopup = popup;
67+
};
68+
69+
const debounce = (callback, timeoutDelay = DEFAULT_DELAY) => {
2370
let timeoutId;
2471

25-
return (...rest) => {
72+
return (...args) => {
2673
clearTimeout(timeoutId);
27-
timeoutId = setTimeout(() => callback.apply(this, rest), timeoutDelay);
74+
timeoutId = setTimeout(() => callback(...args), timeoutDelay);
2875
};
29-
}
76+
};
3077

31-
export { isEscapeKey, showErrorAlert, debounce };
78+
export { isEscapeKey, showErrorAlert, showPopupMessage, debounce };

0 commit comments

Comments
 (0)