Skip to content

Commit abad5ce

Browse files
committed
feat: add preview for selected image
1 parent 46f03a5 commit abad5ce

2 files changed

Lines changed: 47 additions & 3 deletions

File tree

index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ <h2 class="img-upload__title visually-hidden">Загрузка фотограф
3535

3636
<!-- Изначальное состояние поля для загрузки изображения -->
3737
<fieldset class="img-upload__start">
38-
<input type="file" id="upload-file" class="img-upload__input visually-hidden" name="filename" required>
38+
<input type="file" id="upload-file" class="img-upload__input visually-hidden" name="filename" required accept="image/*">
3939
<label for="upload-file" class="img-upload__label img-upload__control">Загрузить</label>
4040
</fieldset>
4141

js/upload-photo-form.js

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ import { sendData } from './api.js';
1010
import { showSuccessMessage, showErrorMessage } from './messages.js';
1111

1212
const MAX_COMMENT_LENGTH = 140;
13+
const FILE_TYPES = ['jpg', 'jpeg', 'png'];
14+
const DEFAULT_PREVIEW_IMAGE = 'img/upload-default-image.jpg';
15+
1316
const SubmitButtonText = {
1417
IDLE: 'Опубликовать',
1518
SENDING: 'Публикую...',
@@ -23,6 +26,8 @@ const uploadCancelButtonNode = uploadFormNode.querySelector('#upload-cancel');
2326
const hashtagsInputNode = uploadFormNode.querySelector('.text__hashtags');
2427
const descriptionInputNode = uploadFormNode.querySelector('.text__description');
2528
const submitButtonNode = uploadFormNode.querySelector('.img-upload__submit');
29+
const previewImageNode = uploadOverlayNode.querySelector('.img-upload__preview img');
30+
const effectsPreviewNodes = uploadOverlayNode.querySelectorAll('.effects__preview');
2631

2732
const pristine = new Pristine(uploadFormNode, {
2833
classTo: 'img-upload__field-wrapper',
@@ -42,11 +47,27 @@ const toggleSubmitButton = (isDisabled) => {
4247
: SubmitButtonText.IDLE;
4348
};
4449

50+
const resetFormFields = () => {
51+
hashtagsInputNode.value = '';
52+
descriptionInputNode.value = '';
53+
pristine.reset();
54+
resetImageEditor();
55+
};
56+
57+
const resetPreview = () => {
58+
previewImageNode.src = DEFAULT_PREVIEW_IMAGE;
59+
effectsPreviewNodes.forEach((preview) => {
60+
preview.style.backgroundImage = `url("${DEFAULT_PREVIEW_IMAGE}")`;
61+
});
62+
};
63+
4564
const resetUploadPhotoForm = () => {
4665
uploadFormNode.reset();
4766
uploadFileControl.value = '';
48-
pristine.reset();
49-
resetImageEditor();
67+
// pristine.reset();
68+
// resetImageEditor();
69+
resetFormFields();
70+
resetPreview();
5071
};
5172

5273
const stopEscapePropagation = (evt) => {
@@ -79,6 +100,29 @@ const closeUploadPhotoForm = () => {
79100
};
80101

81102
const onUploadFileControlChange = () => {
103+
const file = uploadFileControl.files[0];
104+
105+
if (!file) {
106+
return;
107+
}
108+
109+
const fileName = file.name.toLowerCase();
110+
const isValidFileType = FILE_TYPES.some((type) => fileName.endsWith(type));
111+
112+
if (!isValidFileType) {
113+
return;
114+
}
115+
116+
resetFormFields();
117+
118+
const imageUrl = URL.createObjectURL(file);
119+
120+
previewImageNode.src = imageUrl;
121+
122+
effectsPreviewNodes.forEach((preview) => {
123+
preview.style.backgroundImage = `url("${imageUrl}")`;
124+
});
125+
82126
openUploadPhotoForm();
83127
};
84128

0 commit comments

Comments
 (0)