File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11# Личный проект «Кекстаграм»
22
33* Студент: [ Александр Абраменков] ( https://up.htmlacademy.ru/javascript-individual/2/user/2662363 ) .
4- * Наставник: [ Виктория Никитина] ( https://up. htmlacademy.ru/javascript-individual/2/user/2662363 ) .
4+ * Наставник: [ Виктория Никитина] ( https://htmlacademy.ru/profile/id1217273 ) .
55
66---
77
Original file line number Diff line number Diff line change 1+ export const getPhotos = ( ) => fetch ( 'https://31.javascript.htmlacademy.pro/kekstagram/data' )
2+ . then ( ( response ) => {
3+ if ( ! response . ok ) {
4+ throw new Error ( ) ;
5+ }
6+ return response . json ( ) ;
7+ } ) ;
8+
9+ export const postPhoto = ( body ) => fetch ( 'https://31.javascript.htmlacademy.pro/kekstagram/' ,
10+ {
11+ method : 'post' ,
12+ body
13+ }
14+ ) ;
Original file line number Diff line number Diff line change 11/* eslint-disable no-use-before-define */
22
33const COMMENTS_STEP = 5 ;
4- const body = document . body ;
4+ const bodyNode = document . body ;
55const modalNode = document . querySelector ( '.big-picture' ) ;
66const closeButtonNode = modalNode . querySelector ( '.big-picture__cancel' ) ;
77const imageNode = modalNode . querySelector ( '.big-picture__img img' ) ;
@@ -23,14 +23,14 @@ let renderedComments;
2323const showModal = ( isVisible = true ) => {
2424 if ( isVisible ) {
2525 modalNode . classList . remove ( 'hidden' ) ;
26- body . classList . add ( 'modal-open' ) ;
26+ bodyNode . classList . add ( 'modal-open' ) ;
2727
2828
2929 document . addEventListener ( 'keydown' , onDocumentKeydown ) ;
3030 return ;
3131 }
3232 modalNode . classList . add ( 'hidden' ) ;
33- body . classList . remove ( 'modal-open' ) ;
33+ bodyNode . classList . remove ( 'modal-open' ) ;
3434
3535 document . removeEventListener ( 'keydown' , onDocumentKeydown ) ;
3636} ;
Original file line number Diff line number Diff line change @@ -83,64 +83,3 @@ export const EffectsSettings = {
8383 } ,
8484} ;
8585
86- export const MIN_LIKES = 15 ;
87- export const MAX_LIKES = 200 ;
88- export const MIN_COMMENTS = 0 ;
89- export const MAX_COMMENTS = 30 ;
90-
91- export const DESCRIPTIONS = [
92- 'Красивый вид' ,
93- 'Указатель' ,
94- 'Море' ,
95- 'Девушка' ,
96- 'Суп-улыбка' ,
97- 'Спортивная-машина' ,
98- 'Клубника на тарелке' ,
99- 'Морс' ,
100- 'Самолет над пляжем' ,
101- 'Отдел для обуви' ,
102- 'Ограждение на пляже' ,
103- 'Спорткар Ауди' ,
104- 'Салат' ,
105- 'Кот ролл' ,
106- 'Модные сапоги' ,
107- 'Вид с высоты' ,
108- 'Оркестр' ,
109- 'Ретроавтомобиль' ,
110- 'Женщина в тапочках' ,
111- 'Пальмы в зоне отеля' ,
112- 'Тарелка с едой' ,
113- 'Закат на море' ,
114- 'Краб' ,
115- 'Фаер-шоу' ,
116- 'Тропики' ,
117- ] ;
118-
119- // Массив имён для комментаторов
120- export const NAMES = [
121- 'Александр' ,
122- 'Мария' ,
123- 'Иван' ,
124- 'Екатерина' ,
125- 'Дмитрий' ,
126- 'Анна' ,
127- 'Сергей' ,
128- 'Ольга' ,
129- 'Алексей' ,
130- 'Наталья' ,
131- 'Артём' ,
132- 'Елена' ,
133- 'Максим' ,
134- 'Татьяна' ,
135- 'Владимир' ,
136- ] ;
137-
138- // Массив фраз для комментариев
139- export const PHRASES = [
140- 'Всё отлично!' ,
141- 'В целом всё неплохо. Но не всё.' ,
142- 'Когда вы делаете фотографию, хорошо бы убирать палец из кадра. В конце концов это просто непрофессионально.' ,
143- 'Моя бабушка случайно чихнула с фотоаппаратом в руках и у неё получилась фотография лучше.' ,
144- 'Я поскользнулся на банановой кожуре и уронил фотоаппарат на кота и у меня получилась фотография лучше.' ,
145- 'Лица у людей на фотке перекошены, как будто их избивают. Как можно было поймать такой неудачный момент?!' ,
146- ] ;
Load diff This file was deleted.
Original file line number Diff line number Diff line change 11import { isValid , resetValidation } from './validation.js' ;
22import { resetScale } from './scale.js' ;
33import { resetEffects } from './effects.js' ;
4+ import { Popups , showPopup } from './popups.js' ;
5+
6+ const SubmitButtonCaptions = {
7+ IDLE : 'Опубликовать' ,
8+ SENDING : 'Публикую...'
9+ } ;
410
511const formNode = document . querySelector ( '#upload-select-image' ) ;
612const inputFileNode = document . querySelector ( '#upload-file' ) ;
713const modalNode = document . querySelector ( '.img-upload__overlay' ) ;
814const closeButtonNode = document . querySelector ( '#upload-cancel' ) ;
15+ const submitButtonNode = document . querySelector ( '#upload-submit' ) ;
916
1017const closeModal = ( ) => {
1118 modalNode . classList . add ( 'hidden' ) ;
@@ -26,8 +33,37 @@ closeButtonNode.addEventListener('click', (evt) => {
2633 closeModal ( ) ;
2734} ) ;
2835
36+ const blockSubmit = ( isBlocked = true ) => {
37+ submitButtonNode . disabled = isBlocked ;
38+ submitButtonNode . textContent = isBlocked ? SubmitButtonCaptions . SENDING : SubmitButtonCaptions . IDLE ;
39+ } ;
40+
2941formNode . addEventListener ( 'submit' , ( evt ) => {
30- if ( ! isValid ( ) ) {
31- evt . preventDefault ( ) ;
42+ evt . preventDefault ( ) ;
43+ if ( isValid ( ) ) {
44+ blockSubmit ( ) ;
45+ fetch ( 'https://31.javascript.htmlacademy.pro/kekstagram/' ,
46+ {
47+ method : 'post' ,
48+ body : new FormData ( formNode )
49+ }
50+ )
51+ . then ( ( response ) => {
52+ if ( ! response . ok ) {
53+ throw new Error ( ) ;
54+ }
55+ //close form
56+ closeModal ( ) ;
57+
58+ //show success popup
59+ showPopup ( Popups . SUCCESS ) ;
60+ } )
61+ . finally ( ( ) => {
62+ blockSubmit ( false ) ;
63+ } )
64+ . catch ( ( ) => {
65+ // show error popup
66+ showPopup ( Popups . ERROR ) ;
67+ } ) ;
3268 }
3369} ) ;
Load diff This file was deleted.
Original file line number Diff line number Diff line change 1- import { getPhotos } from './data .js' ;
1+ import { getPhotos } from './api .js' ;
22import { renderCards } from './render-cards.js' ;
33import './form.js' ;
4+ import { showErrorBanner } from './utils.js' ;
45
5-
6- const photos = getPhotos ( 25 ) ;
7- renderCards ( photos ) ;
6+ getPhotos ( )
7+ . then ( ( photos ) => {
8+ //set filters
9+ renderCards ( photos ) ;
10+ } )
11+ . catch ( ( ) => {
12+ showErrorBanner ( ) ;
13+ } ) ;
Original file line number Diff line number Diff line change 1+ export const Popups = {
2+ ERROR : 'error' ,
3+ SUCCESS : 'success'
4+ } ;
5+ const successTemplate = document . querySelector ( '#success' ) . content . querySelector ( '.success' ) ;
6+ const errorTemplate = document . querySelector ( '#error' ) . content . querySelector ( '.error' ) ;
7+ const bodyNode = document . body ;
8+
9+ const templates = {
10+ [ Popups . ERROR ] : errorTemplate ,
11+ [ Popups . SUCCESS ] : successTemplate
12+ } ;
13+
14+ export const showPopup = ( type ) => {
15+ const popup = templates [ type ] . cloneNode ( true ) ;
16+ bodyNode . append ( popup ) ;
17+
18+ const onDocumentKeydown = ( { key } ) => {
19+ if ( key === 'Escape' ) {
20+ popup . remove ( ) ;
21+ document . removeEventListener ( 'keydown' , onDocumentKeydown ) ;
22+ }
23+ } ;
24+
25+ popup . addEventListener ( 'click' , ( { target } ) => {
26+ if ( target . classList . contains ( type ) || target . classList . contains ( `${ type } __button` ) ) {
27+ popup . remove ( ) ;
28+ document . removeEventListener ( 'keydown' , onDocumentKeydown ) ;
29+ }
30+ } ) ;
31+
32+ document . addEventListener ( 'keydown' , onDocumentKeydown ) ;
33+ } ;
Original file line number Diff line number Diff line change 1+ const TIMEOUT = 5000 ;
2+
3+ const errorBannerTemplate = document . querySelector ( '#data-error' ) . content . querySelector ( '.data-error' ) ;
4+ const bodyNode = document . body ;
5+
16// Функция getRandomNumber
27export const getRandomNumber = ( min , max ) => {
38 const left = Math . ceil ( Math . min ( min , max ) ) ;
@@ -8,3 +13,12 @@ export const getRandomNumber = (min, max) => {
813
914//Функция getRandomElement
1015export const getRandomElement = ( items ) => items [ getRandomNumber ( 0 , items . length - 1 ) ] ;
16+
17+
18+ export const showErrorBanner = ( ) => {
19+ const errorBanner = errorBannerTemplate . cloneNode ( true ) ;
20+ bodyNode . append ( errorBanner ) ;
21+ setTimeout ( ( ) => {
22+ errorBanner . remove ( ) ;
23+ } , TIMEOUT ) ;
24+ } ;
You can’t perform that action at this time.
0 commit comments