Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 1 addition & 24 deletions js/data.js
Original file line number Diff line number Diff line change
@@ -1,26 +1,3 @@
// Массив случайных имён
const NAMES = [
'Алексей',
'Мария',
'Дмитрий',
'Елена',
'Сергей',
'Анна',
'Иван',
'Ольга',
'Николай',
'Татьяна'
];

const MESSAGES = [
'Всё отлично!',
'В целом всё неплохо. Но не всё.',
'Когда вы делаете фотографию, хорошо бы убирать палец из кадра. В конце концов это просто непрофессионально.',
'Моя бабушка случайно чихнула с фотоаппаратом в руках и у неё получилась фотография лучше.',
'Я поскользнулся на банановой кожуре и уронил фотоаппарат на кота и у меня получилась фотография лучше.',
'Лица у людей на фотке перекошены, как будто их избивают. Как можно было поймать такой неудачный момент?!'
];

// Константы для управления масштабом изображения
const SCALE = {
STEP: 25, // шаг изменения в процентах
Expand Down Expand Up @@ -77,4 +54,4 @@ const EFFECTS = {
// Значение по умолчанию для эффекта
const DEFAULT_EFFECT = 'none';

export {NAMES, MESSAGES,SCALE, EFFECTS, DEFAULT_EFFECT};
export {SCALE, EFFECTS, DEFAULT_EFFECT};
2 changes: 1 addition & 1 deletion js/event-handlers.js
Original file line number Diff line number Diff line change
Expand Up @@ -193,4 +193,4 @@ const setupEventHandlers = (
}
};

export { setupEventHandlers, showSuccessMessage, showErrorMessage, sendFormData };
export { setupEventHandlers, showSuccessMessage, showErrorMessage};
52 changes: 35 additions & 17 deletions js/full-screen-viewer.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,29 @@
import { isEscapeKey } from './util.js';
import { getBigPicture, getBody,getCommentsContainer, getCommentCountElement, getCommentsLoaderElement,getShownCommentCountElement, getTotalCommentCountElement,getLikesCountElement, getCaptionElement, getImageElement} from './dom.js';
import {
getBigPicture,
getBody,
getCommentsContainer,
getCommentCountElement,
getCommentsLoaderElement,
getShownCommentCountElement,
getTotalCommentCountElement,
getLikesCountElement,
getCaptionElement,
getImageElement
} from './dom.js';

const COMMENTS_PER_PAGE = 5;
let currentCommentsShown = 0;

// Кэшированная переменная для элемента bigPicture
let cachedBigPicture = null;

// Закрытие модального окна
const closeFullScreen = () => {
const bigPicture = getBigPicture();
const body = getBody();

if (bigPicture) {
bigPicture.classList.add('hidden');
if (cachedBigPicture) {
cachedBigPicture.classList.add('hidden');
}
if (body) {
body.classList.remove('modal-open');
Expand All @@ -20,9 +33,12 @@ const closeFullScreen = () => {

// Настройка обработчиков закрытия
const setupCloseHandlers = () => {
const closeButton = getBigPicture()?.querySelector('.big-picture__cancel');
if (!cachedBigPicture) {
return;
}

if (!closeButton){
const closeButton = cachedBigPicture.querySelector('.big-picture__cancel');
if (!closeButton) {
return;
}

Expand Down Expand Up @@ -113,6 +129,7 @@ const fillPostData = (photoData) => {
captionEl.textContent = photoData.descriptions || '';
}
};

// Показываем элементы интерфейса
const showInterfaceElements = () => {
const commentCountEl = getCommentCountElement();
Expand All @@ -138,29 +155,25 @@ const clearComments = () => {
// Настраиваем обработчик загрузки комментариев — вызывается один раз
const setupLoadMoreHandler = () => {
const commentsLoaderEl = getCommentsLoaderElement();

if (!commentsLoaderEl) {
return;
}

commentsLoaderEl.addEventListener('click', () => {
const bigPicture = getBigPicture();
const savedComments = bigPicture?.dataset.currentComments;
const savedComments = cachedBigPicture?.dataset.currentComments;
if (savedComments) {
renderComments(JSON.parse(savedComments));
}
});
};

const openFullScreen = (photoData) => {
const bigPicture = getBigPicture();

if (!bigPicture) {
if (!cachedBigPicture) {
throw new Error('Элемент .big-picture не найден в DOM');
}

// Сохраняем комментарии в атрибуте
bigPicture.dataset.currentComments = JSON.stringify(photoData.comments);
cachedBigPicture.dataset.currentComments = JSON.stringify(photoData.comments);

// Заполняем данные
fillPostData(photoData);
Expand All @@ -175,12 +188,19 @@ const openFullScreen = (photoData) => {
renderComments(photoData.comments);

// Добавляем классы
bigPicture.classList.remove('hidden');
cachedBigPicture.classList.remove('hidden');
getBody().classList.add('modal-open');
};

// Инициализация — вызываем один раз при загрузке страницы
const initGallery = () => {
// Получаем элемент один раз при инициализации
cachedBigPicture = getBigPicture();

if (!cachedBigPicture) {
throw new Error('Элемент .big-picture не найден в DOM при инициализации');
}

setupCloseHandlers();
setupLoadMoreHandler();
};
Expand All @@ -207,6 +227,4 @@ const initThumbnailHandlers = (photoDataList) => {
});
};

document.addEventListener('DOMContentLoaded', initGallery);

export {initGallery,initThumbnailHandlers};
export {initGallery, initThumbnailHandlers};
2 changes: 1 addition & 1 deletion js/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const initApp = async () => {
thumbsList = await loadThumbsFromServer();

// Инициализируем остальные модули с уже загруженными данными
initGallery(thumbsList);
initGallery();
initThumbnailHandlers(thumbsList);
initScaleControls();
initUploadForm();
Expand Down
10 changes: 1 addition & 9 deletions js/render.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { getData } from './api.js';
import{debounce} from './util.js';

// Функция для показа блока фильтров
const showFiltersBlock = () => {
Expand Down Expand Up @@ -47,15 +48,6 @@ const renderThumbs = (thumbsList) => {
showFiltersBlock();
};

// Функция устранения дребезга
const debounce = (callback, delay) => {
let timeoutId;
return (...args) => {
clearTimeout(timeoutId);
timeoutId = setTimeout(() => callback.apply(null, args), delay);
};
};

// Функция для получения 10 случайных уникальных элементов
const getRandomPhotos = (photos, count = 10) => {
const shuffled = [...photos].sort(() => 0.5 - Math.random());
Expand Down
34 changes: 0 additions & 34 deletions js/thumbs.js

This file was deleted.

11 changes: 10 additions & 1 deletion js/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,13 @@ const getRandomArrayName = (array) => array[getRandomInt(0, array.length - 1)];
//проверка нажатия esc
export const isEscapeKey = (evt) => evt.key === 'Escape';

export {getRandomInt,getRandomArrayName};
// Функция устранения дребезга
const debounce = (callback, delay) => {
let timeoutId;
return (...args) => {
clearTimeout(timeoutId);
timeoutId = setTimeout(() => callback.apply(null, args), delay);
};
};

export {getRandomInt,getRandomArrayName,debounce};
4 changes: 3 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"url": "https://github.com/htmlacademy-javascript/2468767-kekstagram-2/issues"
},
"devDependencies": {
"eslint": "8.48.0",
"eslint": "^8.48.0",
"eslint-config-htmlacademy": "9.1.1",
"vite": "4.4.9"
},
Expand Down
Loading