Skip to content

Commit 332a8e9

Browse files
authored
Merge pull request #9 from AnastasiiaXX/module9-task1
2 parents fb783d5 + b189a07 commit 332a8e9

3 files changed

Lines changed: 87 additions & 2 deletions

File tree

index.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ <h2 class="pictures__title visually-hidden">Фотографии других
3030
<section class="img-upload">
3131
<div class="img-upload__wrapper">
3232
<h2 class="img-upload__title visually-hidden">Загрузка фотографии</h2>
33-
<form class="img-upload__form" id="upload-select-image" autocomplete="off">
33+
<form class="img-upload__form" id="upload-select-image" autocomplete="off"
34+
method="post" action="https://31.javascript.htmlacademy.pro/kekstagram" enctype="multipart/form-data">
3435

3536
<!-- Изначальное состояние поля для загрузки изображения -->
3637
<fieldset class="img-upload__start">
@@ -233,6 +234,7 @@ <h2 class="success__title">Изображение успешно загруже
233234
<h2 class="data-error__title">Не удалось загрузить данные</h2>
234235
</section>
235236
</template>
237+
<script src="vendor/pristine/pristine.min.js"></script>
236238
<script src="js/main.js" type="module"></script>
237239
</body>
238240
</html>

js/main.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { renderThumbnails } from './thumbnails.js';
22
import { showFullPhoto } from './show-full-photo.js';
3+
import { initUploadForm } from './upload-form.js';
34

45
renderThumbnails();
56
showFullPhoto();
6-
7+
initUploadForm();

js/upload-form.js

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import { openModal, closeModal } from './modal.js';
2+
3+
const MAX_HASHTAG_COUNT = 5;
4+
const MAX_COMMENT_LENGTH = 140;
5+
const TAG_ERROR_TEXT = 'Неправильно заполнены хэштеги';
6+
const HASHTAG_REGEXP = /^#[a-zа-я0-9]{1,19}$/i;
7+
8+
const form = document.querySelector('.img-upload__form');
9+
const fileInput = document.querySelector('.img-upload__input');
10+
const cancelBtn = form.querySelector('.img-upload__cancel');
11+
const body = document.querySelector('body');
12+
const uploadOverlay = form.querySelector('.img-upload__overlay');
13+
const hashtagInput = form.querySelector('.text__hashtags');
14+
15+
const commentInput = form.querySelector('.text__description');
16+
17+
const pristine = new Pristine(form, {
18+
classTo: 'img-upload__field-wrapper',
19+
errorClass: 'img-upload__field-wrapper--error',
20+
errorTextParent: 'img-upload__field-wrapper',
21+
});
22+
23+
export const initUploadForm = () => {
24+
fileInput.addEventListener('change', () => {
25+
openModal(uploadOverlay, body);
26+
});
27+
28+
cancelBtn.addEventListener('click', () => {
29+
closeModal(uploadOverlay, body);
30+
form.reset();
31+
fileInput.value = '';
32+
pristine.reset();
33+
});
34+
const validateTags = (value) => {
35+
if (!value) {
36+
return true;
37+
}
38+
const splitHashtags = value.split(' ').filter(Boolean);
39+
const lowerCaseHashtags = splitHashtags.map((hashtag) => hashtag.toLowerCase());
40+
const sizeUnique = new Set(lowerCaseHashtags).size;
41+
if (splitHashtags.length > MAX_HASHTAG_COUNT || splitHashtags.length !== sizeUnique) {
42+
return false;
43+
}
44+
return splitHashtags.every((hashtag) => HASHTAG_REGEXP.test(hashtag));
45+
};
46+
47+
const validateComment = (value) => {
48+
if (!value) {
49+
return true;
50+
}
51+
52+
return value.length <= MAX_COMMENT_LENGTH;
53+
};
54+
55+
pristine.addValidator(
56+
hashtagInput,
57+
validateTags,
58+
TAG_ERROR_TEXT
59+
);
60+
61+
pristine.addValidator(
62+
commentInput,
63+
validateComment,
64+
`Длина комментария не может составлять больше ${MAX_COMMENT_LENGTH} символов`
65+
);
66+
67+
form.addEventListener('submit', (evt) => {
68+
evt.preventDefault();
69+
if (!pristine.validate()) {
70+
// eslint-disable-next-line no-useless-return
71+
return;
72+
}
73+
});
74+
75+
const stopEscPropagation = (evt) => {
76+
if (evt.key === 'Escape') {
77+
evt.stopPropagation();
78+
}
79+
};
80+
hashtagInput.addEventListener('keydown', stopEscPropagation);
81+
commentInput.addEventListener('keydown', stopEscPropagation);
82+
};

0 commit comments

Comments
 (0)