11import { initScale , resetScale } from './scale.js' ;
2- import { initEffect , resetEffect } from './effect.js' ;
2+ import { initEffect , resetEffect , updateEffectsPreview } from './effect.js' ;
33import { sendData } from './api.js' ;
44import { showSuccessMessage , showErrorMessage } from './messages.js' ;
55
@@ -16,7 +16,7 @@ const DEFAULT_PREVIEW_SRC = 'img/upload-default-image.jpg';
1616
1717const MAX_HASHTAGS = 5 ;
1818const MAX_HASHTAG_LENGTH = 20 ;
19- const VALID_HASHTAG_REGEX = / ^ # [ a - я ё a - z 0 - 9 ] { 1 , 19 } $ / i ;
19+ const VALID_HASHTAG_REGEX = / ^ # [ a - я ё a - z 0 - 9 ] { 1 , 19 } $ / iu ;
2020
2121const pristine = new Pristine ( uploadForm , {
2222 classTo : 'img-upload__field-wrapper' ,
@@ -87,28 +87,43 @@ const getHashtagErrorMessage = (value) => {
8787
8888const validateDescription = ( value ) => value . length <= 140 ;
8989
90- pristine . addValidator ( hashtagsInput , validateHashtags , getHashtagErrorMessage ) ;
91- pristine . addValidator ( descriptionInput , validateDescription , 'Комментарий не должен быть длинее 140 символов' ) ;
92-
93- const openForm = ( ) => {
94- uploadOverlay . classList . remove ( 'hidden' ) ;
95- document . body . classList . add ( 'modal-open' ) ;
96- } ;
97-
98- const closeForm = ( ) => {
90+ function closeForm ( ) {
9991 uploadOverlay . classList . add ( 'hidden' ) ;
10092 document . body . classList . remove ( 'modal-open' ) ;
93+ document . removeEventListener ( 'keydown' , onDocumentKeydown ) ;
10194 uploadForm . reset ( ) ;
10295 pristine . reset ( ) ;
10396 resetScale ( ) ;
10497 resetEffect ( ) ;
10598 imgUploadPreview . src = DEFAULT_PREVIEW_SRC ;
99+ }
100+
101+ function onDocumentKeydown ( evt ) {
102+ if ( evt . key === 'Escape' && ! uploadOverlay . classList . contains ( 'hidden' ) ) {
103+ const activeElement = document . activeElement ;
104+ const isErrorMessageOpen = document . querySelector ( '.error' ) ;
105+ const isSuccessMessageOpen = document . querySelector ( '.success' ) ;
106+ if ( activeElement !== hashtagsInput && activeElement !== descriptionInput && ! isErrorMessageOpen && ! isSuccessMessageOpen ) {
107+ closeForm ( ) ;
108+ }
109+ }
110+ }
111+
112+ const openForm = ( ) => {
113+ uploadOverlay . classList . remove ( 'hidden' ) ;
114+ document . body . classList . add ( 'modal-open' ) ;
115+ document . addEventListener ( 'keydown' , onDocumentKeydown ) ;
106116} ;
107117
118+ pristine . addValidator ( hashtagsInput , validateHashtags , getHashtagErrorMessage ) ;
119+ pristine . addValidator ( descriptionInput , validateDescription , 'Комментарий не должен быть длинее 140 символов' ) ;
120+
108121const onUploadFileInputChange = ( ) => {
109122 const file = uploadFileInput . files [ 0 ] ;
110123 if ( file ) {
111- imgUploadPreview . src = URL . createObjectURL ( file ) ;
124+ const imageUrl = URL . createObjectURL ( file ) ;
125+ imgUploadPreview . src = imageUrl ;
126+ updateEffectsPreview ( imageUrl ) ;
112127 }
113128 openForm ( ) ;
114129} ;
@@ -143,22 +158,12 @@ const onUploadFormSubmit = (evt) => {
143158 }
144159} ;
145160
146- const onDocumentKeydown = ( evt ) => {
147- if ( evt . key === 'Escape' && ! uploadOverlay . classList . contains ( 'hidden' ) ) {
148- const activeElement = document . activeElement ;
149- if ( activeElement !== hashtagsInput && activeElement !== descriptionInput ) {
150- closeForm ( ) ;
151- }
152- }
153- } ;
154-
155161const initFormUpload = ( ) => {
156162 initScale ( ) ;
157163 initEffect ( ) ;
158164 uploadFileInput . addEventListener ( 'change' , onUploadFileInputChange ) ;
159165 uploadCancel . addEventListener ( 'click' , onUploadCancelClick ) ;
160166 uploadForm . addEventListener ( 'submit' , onUploadFormSubmit ) ;
161- document . addEventListener ( 'keydown' , onDocumentKeydown ) ;
162167} ;
163168
164169export { initFormUpload } ;
0 commit comments