1+ const COMMENTS_STEP = 5 ;
2+
13const bigPicture = document . querySelector ( '.big-picture' ) ;
24const closeButton = bigPicture . querySelector ( '.big-picture__cancel' ) ;
35const commentsContainer = bigPicture . querySelector ( '.social__comments' ) ;
6+ const commentsLoader = bigPicture . querySelector ( '.comments-loader' ) ;
7+ const socialCommentCount = bigPicture . querySelector ( '.social__comment-count' ) ;
8+ const commentsShownCount = bigPicture . querySelector ( '.social__comment-shown-count' ) ;
9+ const commentsTotalCount = bigPicture . querySelector ( '.social__comment-total-count' ) ;
10+
11+ let commentsShown = 0 ;
12+ let comments = [ ] ;
413
514const createComment = ( { avatar, name, message } ) => {
615 const commentItem = document . createElement ( 'li' ) ;
@@ -23,15 +32,33 @@ const createComment = ({ avatar, name, message }) => {
2332 return commentItem ;
2433} ;
2534
26- const renderComments = ( comments ) => {
27- commentsContainer . innerHTML = '' ;
28- const fragment = document . createDocumentFragment ( ) ;
35+ const renderComments = ( ) => {
36+ const nextComments = comments . slice ( commentsShown , commentsShown + COMMENTS_STEP ) ;
37+ commentsShown += nextComments . length ;
2938
30- comments . forEach ( ( commentData ) => {
39+ const fragment = document . createDocumentFragment ( ) ;
40+ nextComments . forEach ( ( commentData ) => {
3141 fragment . append ( createComment ( commentData ) ) ;
3242 } ) ;
3343
3444 commentsContainer . append ( fragment ) ;
45+
46+ commentsShownCount . textContent = commentsShown ;
47+
48+ if ( commentsShown >= comments . length ) {
49+ commentsLoader . classList . add ( 'hidden' ) ;
50+ } else {
51+ commentsLoader . classList . remove ( 'hidden' ) ;
52+ }
53+ } ;
54+
55+ const onCommentsLoaderClick = ( ) => renderComments ( ) ;
56+
57+ const closeBigPicture = ( ) => {
58+ bigPicture . classList . add ( 'hidden' ) ;
59+ document . body . classList . remove ( 'modal-open' ) ;
60+ commentsLoader . removeEventListener ( 'click' , onCommentsLoaderClick ) ;
61+ commentsShown = 0 ;
3562} ;
3663
3764const onDocumentKeydown = ( evt ) => {
@@ -41,12 +68,6 @@ const onDocumentKeydown = (evt) => {
4168 }
4269} ;
4370
44- function closeBigPicture ( ) {
45- bigPicture . classList . add ( 'hidden' ) ;
46- document . body . classList . remove ( 'modal-open' ) ;
47- document . removeEventListener ( 'keydown' , onDocumentKeydown ) ;
48- }
49-
5071const openBigPicture = ( photo ) => {
5172 bigPicture . classList . remove ( 'hidden' ) ;
5273 document . body . classList . add ( 'modal-open' ) ;
@@ -55,15 +76,16 @@ const openBigPicture = (photo) => {
5576 bigPicture . querySelector ( '.likes-count' ) . textContent = photo . likes ;
5677 bigPicture . querySelector ( '.social__caption' ) . textContent = photo . description ;
5778
58- bigPicture . querySelector ( '.social__comment-total-count' ) . textContent = photo . comments . length ;
59- bigPicture . querySelector ( '.social__comment-shown-count' ) . textContent = photo . comments . length ;
60-
61- bigPicture . querySelector ( '.social__comment-count' ) . classList . add ( 'hidden' ) ;
62- bigPicture . querySelector ( '.comments-loader' ) . classList . add ( 'hidden' ) ;
79+ comments = photo . comments ;
80+ commentsTotalCount . textContent = comments . length ;
81+ commentsContainer . innerHTML = '' ;
82+ socialCommentCount . classList . remove ( 'hidden' ) ;
83+ commentsLoader . classList . remove ( 'hidden' ) ;
6384
64- renderComments ( photo . comments ) ;
85+ renderComments ( ) ;
6586
66- document . addEventListener ( 'keydown' , onDocumentKeydown ) ;
87+ commentsLoader . addEventListener ( 'click' , onCommentsLoaderClick ) ;
88+ document . addEventListener ( 'keydown' , onDocumentKeydown , { once : true } ) ;
6789} ;
6890
6991closeButton . addEventListener ( 'click' , closeBigPicture ) ;
0 commit comments