Skip to content

Commit e1b9c8b

Browse files
authored
Merge pull request #17 from YouAreNotReady/master
2 parents 328535b + 5558c0e commit e1b9c8b

File tree

4 files changed

+37
-52
lines changed

4 files changed

+37
-52
lines changed

js/image-effect.js

+22-41
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
11
import { imagePreview } from './image-scaling.js';
2+
import { getRadioButtonsValue } from './util.js';
23

3-
const EffectsList = {
4-
chrome: document.querySelector('#effect-chrome'),
5-
sepia: document.querySelector('#effect-sepia'),
6-
marvin: document.querySelector('#effect-marvin'),
7-
phobos: document.querySelector('#effect-phobos'),
8-
heat: document.querySelector('#effect-heat'),
9-
};
104
const EffectsOptions = {
11-
noEffect: { range: { min: 0, max: 0 }, start: 0},
12-
chromeAndSepia: { range: { min: 0, max: 1 }, start: 1, step: 0.1 },
13-
marvin: { range: { min: 0, max: 100 }, start: 100, step: 1 },
14-
phobos: { range: { min: 0, max: 3 }, start: 3, step: 0.1 },
15-
heat: { range: { min: 1, max: 3 }, start: 3, step: 0.1 },
5+
'none': { range: { min: 0, max: 0 }, start: 0},
6+
'chrome': { range: { min: 0, max: 1 }, start: 1, step: 0.1 },
7+
'sepia': { range: { min: 0, max: 1 }, start: 1, step: 0.1 },
8+
'marvin': { range: { min: 0, max: 100 }, start: 100, step: 1 },
9+
'phobos': { range: { min: 0, max: 3 }, start: 3, step: 0.1 },
10+
'heat': { range: { min: 1, max: 3 }, start: 3, step: 0.1 },
1611
};
1712

1813
const sliderNodeWrapper = document.querySelector('.img-upload__effect-level');
@@ -21,6 +16,7 @@ const valueNode = document.querySelector('.effect-level__value');
2116
const radioInputSection = document.querySelector('.img-upload__effects');
2217
const effectPreviewElements = radioInputSection.querySelectorAll('.effects__preview');
2318
let currentSliderValue = 0;
19+
let currentEffect = 'none';
2420

2521
sliderNodeWrapper.classList.add('hidden');
2622

@@ -44,23 +40,21 @@ noUiSlider.create(sliderNode, {
4440
},
4541
});
4642

47-
const applyEffect = () => {
48-
const isElementChecked = true;
49-
50-
switch (isElementChecked) {
51-
case EffectsList.chrome.checked:
43+
const applyEffect = (effect) => {
44+
switch (effect) {
45+
case 'chrome':
5246
imagePreview.style.filter = `grayscale(${currentSliderValue})`;
5347
break;
54-
case EffectsList.sepia.checked:
48+
case 'sepia':
5549
imagePreview.style.filter = `sepia(${currentSliderValue})`;
5650
break;
57-
case EffectsList.marvin.checked:
51+
case 'marvin':
5852
imagePreview.style.filter = `invert(${currentSliderValue}%)`;
5953
break;
60-
case EffectsList.phobos.checked:
54+
case 'phobos':
6155
imagePreview.style.filter = `blur(${currentSliderValue}px)`;
6256
break;
63-
case EffectsList.heat.checked:
57+
case 'heat':
6458
imagePreview.style.filter = `brightness(${currentSliderValue})`;
6559
break;
6660
default:
@@ -71,33 +65,20 @@ const applyEffect = () => {
7165
sliderNode.noUiSlider.on('update', () => {
7266
currentSliderValue = sliderNode.noUiSlider.get();
7367
valueNode.value = currentSliderValue;
74-
applyEffect();
68+
applyEffect(currentEffect);
7569
});
7670

7771
radioInputSection.addEventListener('click', (evt) => {
7872
if (evt.target.matches('input[type="radio"]')) {
7973
let options = {};
74+
currentEffect = getRadioButtonsValue('effect');
75+
8076
sliderNodeWrapper.classList.remove('hidden');
81-
switch (evt.target) {
82-
case EffectsList.chrome:
83-
case EffectsList.sepia:
84-
options = EffectsOptions.chromeAndSepia;
85-
break;
86-
case EffectsList.marvin:
87-
options = EffectsOptions.marvin;
88-
break;
89-
case EffectsList.phobos:
90-
options = EffectsOptions.phobos;
91-
break;
92-
case EffectsList.heat:
93-
options = EffectsOptions.heat;
94-
break;
95-
default:
96-
options = EffectsOptions.noEffect;
97-
applyEffect();
98-
sliderNodeWrapper.classList.add('hidden');
77+
options = EffectsOptions[currentEffect];
78+
if(currentEffect === 'none') {
79+
applyEffect();
80+
sliderNodeWrapper.classList.add('hidden');
9981
}
100-
10182
sliderNode.noUiSlider.updateOptions(options);
10283
}
10384
});

js/image-filtration.js

+4-9
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,6 @@ const RANDOM_IMAGES_COUNT = 10;
55
const RERENDER_DELAY = 500;
66

77
const imagesFilter = document.querySelector('.img-filters');
8-
const FilterButtons = {
9-
default: imagesFilter.querySelector('#filter-default'),
10-
random: imagesFilter.querySelector('#filter-random'),
11-
discussed: imagesFilter.querySelector('#filter-discussed'),
12-
};
138

149
const compareCommentsCount = (imageA, imageB) => {
1510
const commentsA = imageA.comments.length;
@@ -66,16 +61,16 @@ const setFilterClickHandler = (images) => {
6661

6762
let selectedFilter;
6863

69-
switch (evt.target) {
70-
case FilterButtons.default:
64+
switch (evt.target.id) {
65+
case 'filter-default':
7166
selectedFilter = 'defaultFilter';
7267
break;
7368

74-
case FilterButtons.random:
69+
case 'filter-random':
7570
selectedFilter = 'random';
7671
break;
7772

78-
case FilterButtons.discussed:
73+
case 'filter-discussed':
7974
selectedFilter = 'discussed';
8075
break;
8176
}

js/main.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,6 @@ const init = async () => {
2222
}
2323
};
2424

25-
init();
25+
await init();
2626
initForm();
2727

js/util.js

+10-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,15 @@ const getRandomInteger = function(min, max) {
55

66
const isEscapeKey = (evt) => evt.key === 'Escape';
77

8+
const getRadioButtonsValue = (name) => {
9+
const buttons = document.querySelectorAll(`input[name="${name}"]`);
10+
for (const button of buttons) {
11+
if (button.checked) {
12+
return button.value;
13+
}
14+
}
15+
};
16+
817
const debounce = (callback, delayMS = 500) => {
918
let timeoutId;
1019

@@ -15,4 +24,4 @@ const debounce = (callback, delayMS = 500) => {
1524
};
1625
};
1726

18-
export { getRandomInteger, isEscapeKey, debounce };
27+
export { getRandomInteger, isEscapeKey, getRadioButtonsValue, debounce };

0 commit comments

Comments
 (0)