11document . addEventListener ( 'DOMContentLoaded' , ( ) => {
2- const menuParent : HTMLElement = document . querySelector ( '.tabheader__items ' )
2+ const menuParent : HTMLElement = document . querySelector ( '.slideheader__items ' )
33 const menuImage : NodeListOf < Element > = document . querySelectorAll ( '.slidecontent' )
44 const menuItems : NodeListOf < Element > = document . querySelectorAll ( '.slideheader__item' )
55
@@ -22,7 +22,7 @@ document.addEventListener('DOMContentLoaded', () => {
2222 hideContent ( )
2323 showContent ( )
2424
25- menuParent . addEventListener ( 'click' , ( evt ) : void => {
25+ menuParent . addEventListener ( 'click' , ( evt ) => {
2626 const { target } = evt
2727 if ( target && ( target as HTMLElement ) . classList . contains ( 'slideheader__item' ) ) {
2828 menuItems . forEach ( ( item : HTMLElement , i : number ) => {
@@ -80,7 +80,6 @@ document.addEventListener('DOMContentLoaded', () => {
8080 /* Modal Window */
8181 const modalTrigger : NodeListOf < Element > = document . querySelectorAll ( '[data-modal]' )
8282 const modalWindow : HTMLElement = document . querySelector ( '.modal' )
83- const modalCloseButton : HTMLElement = document . querySelector ( '[data-close]' )
8483
8584 modalTrigger . forEach ( ( button ) => {
8685 button . addEventListener ( 'click' , openModal )
@@ -95,9 +94,12 @@ document.addEventListener('DOMContentLoaded', () => {
9594 modalWindow . classList . remove ( 'hide' )
9695 document . body . style . overflow = 'hidden'
9796 }
98- modalCloseButton . addEventListener ( 'click' , closeModal )
97+ 9998 modalWindow . addEventListener ( 'click' , ( event ) => {
100- if ( event . target === modalWindow ) {
99+ if (
100+ event . target === modalWindow ||
101+ ( event . target as HTMLElement ) . getAttribute ( 'data-close' ) === ''
102+ ) {
101103 closeModal ( )
102104 }
103105 } )
@@ -161,6 +163,7 @@ document.addEventListener('DOMContentLoaded', () => {
161163 this . parentSelector . append ( element )
162164 }
163165 }
166+ 164167 new MenuCard (
165168 '../src/assets/img/tabs/vegy.jpg' ,
166169 'fitness' ,
@@ -172,6 +175,7 @@ document.addEventListener('DOMContentLoaded', () => {
172175 '.menu .container' ,
173176 'menu__item'
174177 ) . render ( )
178+ 175179 new MenuCard (
176180 '../src/assets/img/tabs/elite.jpg' ,
177181 'premium' ,
@@ -194,4 +198,75 @@ document.addEventListener('DOMContentLoaded', () => {
194198 '.menu .container' ,
195199 'menu__item'
196200 ) . render ( )
201+ 202+ const forms : NodeListOf < HTMLFormElement > = document . querySelectorAll ( 'form' )
203+ const serverMessage = {
204+ loading : '../src/assets/img/spinner.svg' ,
205+ success : 'Спасибо! Скоро мы с вами свяжемся' ,
206+ error : 'Что-то пошло не так...' ,
207+ }
208+ 209+ forms . forEach ( ( item : HTMLFormElement ) => {
210+ postData ( item )
211+ } )
212+ 213+ function postData ( form : HTMLFormElement ) {
214+ form . addEventListener ( 'submit' , ( event ) => {
215+ event . preventDefault ( )
216+ 217+ const statusMessage : HTMLImageElement = document . createElement ( 'img' )
218+ statusMessage . src = serverMessage . loading
219+ statusMessage . style . cssText = `
220+ display: block;
221+ margin: 0 auto;
222+ `
223+ form . insertAdjacentElement ( 'afterend' , statusMessage )
224+ 225+ const request : XMLHttpRequest = new XMLHttpRequest ( )
226+ request . open ( 'POST' , 'https://jsonplaceholder.typicode.com/users' )
227+ request . setRequestHeader ( 'Content-type' , 'application/json' )
228+ const formData : FormData = new FormData ( form )
229+ 230+ const rawFormData : Object = { }
231+ formData . forEach ( ( value , key ) => {
232+ rawFormData [ key ] = value
233+ } )
234+ const toJSON : string = JSON . stringify ( rawFormData )
235+ 236+ request . send ( toJSON )
237+ 238+ request . addEventListener ( 'load' , ( ) => {
239+ if ( request . status === 201 ) {
240+ showThanksModal ( serverMessage . success )
241+ statusMessage . remove ( )
242+ form . reset ( )
243+ } else {
244+ showThanksModal ( serverMessage . error )
245+ }
246+ } )
247+ } )
248+ }
249+ 250+ function showThanksModal ( thanksMessage : string ) {
251+ const previousModalDialog = document . querySelector ( '.modal__dialog' )
252+ 253+ previousModalDialog . classList . add ( 'hide' )
254+ openModal ( )
255+ 256+ const thanksModal = document . createElement ( 'div' )
257+ thanksModal . classList . add ( 'modal__dialog' )
258+ thanksModal . innerHTML = `
259+ <div class="modal__content">
260+ <div class="modal__close" data-close&g× ばつ </div>
261+ <div class="modal__title">${ thanksMessage } </div>
262+ </div>
263+ `
264+ document . querySelector ( '.modal' ) . append ( thanksModal )
265+ setTimeout ( ( ) => {
266+ thanksModal . remove ( )
267+ previousModalDialog . classList . add ( 'show' )
268+ previousModalDialog . classList . remove ( 'hide' )
269+ closeModal ( )
270+ } , 4000 )
271+ }
197272} )
0 commit comments