Skip to content

Commit 88864ce

Browse files
authored
Merge pull request #6 from Vip2045/module5-task1
2 parents f4dff27 + 156d76e commit 88864ce

6 files changed

Lines changed: 138 additions & 133 deletions

File tree

index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ <h2 class="data-error__title">Не удалось загрузить данны
235235
</template>
236236

237237

238-
<script src="js/main.js"></script>
238+
<script src="./js/main.js" type="module"></script>
239239

240240

241241
</body>

js/constans.js

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
export const MIN_LIKES = 15;
2+
export const MAX_LIKES = 200;
3+
export const MIN_COMMENTS = 0;
4+
export const MAX_COMMENTS = 30;
5+
6+
export const DESCRIPTIONS = [
7+
'Красивый вид',
8+
'Указатель',
9+
'Море',
10+
'Девушка',
11+
'Суп-улыбка',
12+
'Спортивная-машина',
13+
'Клубника на тарелке',
14+
'Морс',
15+
'Самолет над пляжем',
16+
'Отдел для обуви',
17+
'Ограждение на пляже',
18+
'Спорткар Ауди',
19+
'Салат',
20+
'Кот ролл',
21+
'Модные сапоги',
22+
'Вид с высоты',
23+
'Оркестр',
24+
'Ретроавтомобиль',
25+
'Женщина в тапочках',
26+
'Пальмы в зоне отеля',
27+
'Тарелка с едой',
28+
'Закат на море',
29+
'Краб',
30+
'Фаер-шоу',
31+
'Тропики',
32+
];
33+
34+
// Массив имён для комментаторов
35+
export const NAMES = [
36+
'Александр',
37+
'Мария',
38+
'Иван',
39+
'Екатерина',
40+
'Дмитрий',
41+
'Анна',
42+
'Сергей',
43+
'Ольга',
44+
'Алексей',
45+
'Наталья',
46+
'Артём',
47+
'Елена',
48+
'Максим',
49+
'Татьяна',
50+
'Владимир',
51+
];
52+
53+
// Массив фраз для комментариев
54+
export const PHRASES = [
55+
'Всё отлично!',
56+
'В целом всё неплохо. Но не всё.',
57+
'Когда вы делаете фотографию, хорошо бы убирать палец из кадра. В конце концов это просто непрофессионально.',
58+
'Моя бабушка случайно чихнула с фотоаппаратом в руках и у неё получилась фотография лучше.',
59+
'Я поскользнулся на банановой кожуре и уронил фотоаппарат на кота и у меня получилась фотография лучше.',
60+
'Лица у людей на фотке перекошены, как будто их избивают. Как можно было поймать такой неудачный момент?!',
61+
];

js/data.js

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import { DESCRIPTIONS, MAX_COMMENTS, MAX_LIKES, MIN_COMMENTS, MIN_LIKES, NAMES, PHRASES } from './constans.js';
2+
import { getRandomElement, getRandomNumber } from './utils.js';
3+
4+
// Функция для генерации текста комментария (1 или 2 предложения)
5+
const generateMessage = () => {
6+
const numberOfPhrases = getRandomNumber(1, 2);
7+
8+
if (numberOfPhrases === 1) {
9+
return getRandomElement(PHRASES);
10+
} else {
11+
const firstPhrase = getRandomElement(PHRASES);
12+
let secondPhrase = getRandomElement(PHRASES);
13+
// Чтобы предложения не были одинаковыми
14+
while (firstPhrase === secondPhrase) {
15+
secondPhrase = getRandomElement(PHRASES);
16+
}
17+
18+
return `${firstPhrase} ${secondPhrase}`;
19+
}
20+
};
21+
22+
// Счётчик для уникальных id комментариев
23+
let commentId = 1;
24+
25+
// Функция getComments
26+
const getComments = () => {
27+
const n = getRandomNumber(MIN_COMMENTS, MAX_COMMENTS);
28+
const comments = [];
29+
30+
for (let i = 0; i < n; i++) {
31+
comments.push({
32+
id: commentId++, // уникальный id, увеличивается после каждого использования
33+
avatar: `img/avatar-${getRandomNumber(1, 6)}.svg`,
34+
message: generateMessage(), // случайное сообщение из 1-2 фраз
35+
name: getRandomElement(NAMES), // случайное имя из списка
36+
});
37+
}
38+
39+
return comments;
40+
};
41+
42+
// Функция getPhoto
43+
const getPhoto = (i) => ({
44+
id: i,
45+
url: `photos/${i}.jpg`,
46+
description: getRandomElement(DESCRIPTIONS),
47+
likes: getRandomNumber(MIN_LIKES, MAX_LIKES),
48+
comments: getComments(),
49+
});
50+
51+
// функция getPhotos
52+
export const getPhotos = (n) => {
53+
const photos = [];
54+
for (let i = 1; i <= n; i++) {
55+
photos.push(getPhoto(i)); // getPhotos(i)
56+
}
57+
return photos;
58+
};

js/functions.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ const verifyPalindrome = (string) => {
1616

1717
// Задача 3
1818
// Функция принимает строку, извлекает содержащиеся в ней цифры от 0 до 9 и возвращает их в виде целого положительного числа. Если в строке нет ни одной цифры, функция должна вернуть NaN:
19-
// eslint-disable-next-line no-unused-vars
20-
function stringToNumber = (str) => {
19+
// eslint-disable-next-line no-unused-vars, no-undef
20+
function stringToNumber(str) {
2121
const digits = [...str].filter((item) => item >= '0' && item <= '9').join('');
2222
return parseInt(digits, 10);
23-
};
23+
}

js/main.js

Lines changed: 5 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -1,132 +1,8 @@
1-
const MIN_LIKES = 15;
2-
const MAX_LIKES = 200;
3-
const MIN_COMMENTS = 0;
4-
const MAX_COMMENTS = 30;
1+
import { getPhotos } from './data.js';
52

6-
const DESCRIPTION = [
7-
'Красивый вид',
8-
'Указатель',
9-
'Море',
10-
'Девушка',
11-
'Суп-улыбка',
12-
'Спортивная-машина',
13-
'Клубника на тарелке',
14-
'Морс',
15-
'Самолет над пляжем',
16-
'Отдел для обуви',
17-
'Ограждение на пляже',
18-
'Спорткар Ауди',
19-
'Салат',
20-
'Кот ролл',
21-
'Модные сапоги',
22-
'Вид с высоты',
23-
'Оркестр',
24-
'Ретроавтомобиль',
25-
'Женщина в тапочках',
26-
'Пальмы в зоне отеля',
27-
'Тарелка с едой',
28-
'Закат на море',
29-
'Краб',
30-
'Фаер-шоу',
31-
'Тропики',
32-
];
3+
const photos = getPhotos(25);
4+
console.log(photos);
335

34-
// Функция getRandomNumber
35-
const getRandomNumber = (min, max) => {
36-
const left = Math.ceil(Math.min(min, max));
37-
const right = Math.floor(Math.max(min, max));
38-
const random = Math.random() * (right - left + 1) + left;
39-
return Math.floor(random);
40-
};
6+
// отрисовка миниатюр
7+
//блоки счётчика комментариев
418

42-
//Функция getRandomElement
43-
const getRandomElement = (items) => items[getRandomNumber(0, items.length - 1)];
44-
45-
// Массив имён для комментаторов
46-
const NAMES = [
47-
'Александр',
48-
'Мария',
49-
'Иван',
50-
'Екатерина',
51-
'Дмитрий',
52-
'Анна',
53-
'Сергей',
54-
'Ольга',
55-
'Алексей',
56-
'Наталья',
57-
'Артём',
58-
'Елена',
59-
'Максим',
60-
'Татьяна',
61-
'Владимир',
62-
];
63-
64-
// Массив фраз для комментариев
65-
const PHRASES = [
66-
'Всё отлично!',
67-
'В целом всё неплохо. Но не всё.',
68-
'Когда вы делаете фотографию, хорошо бы убирать палец из кадра. В конце концов это просто непрофессионально.',
69-
'Моя бабушка случайно чихнула с фотоаппаратом в руках и у неё получилась фотография лучше.',
70-
'Я поскользнулся на банановой кожуре и уронил фотоаппарат на кота и у меня получилась фотография лучше.',
71-
'Лица у людей на фотке перекошены, как будто их избивают. Как можно было поймать такой неудачный момент?!',
72-
];
73-
74-
// Функция для генерации текста комментария (1 или 2 предложения)
75-
const generateMessage = () => {
76-
const numberOfPhrases = getRandomNumber(1, 2);
77-
78-
if (numberOfPhrases === 1) {
79-
return getRandomElement(PHRASES);
80-
} else {
81-
const firstPhrase = getRandomElement(PHRASES);
82-
let secondPhrase = getRandomElement(PHRASES);
83-
84-
// Чтобы предложения не были одинаковыми
85-
while (firstPhrase === secondPhrase) {
86-
secondPhrase = getRandomElement(PHRASES);
87-
}
88-
89-
return `${firstPhrase} ${secondPhrase}`;
90-
}
91-
};
92-
93-
// Счётчик для уникальных id комментариев
94-
let commentId = 1;
95-
96-
// Функция getComments
97-
const getComments = () => {
98-
const n = getRandomNumber(MIN_COMMENTS, MAX_COMMENTS);
99-
const comments = [];
100-
101-
for (let i = 0; i < n; i++) {
102-
comments.push({
103-
id: commentId++, // уникальный id, увеличивается после каждого использования
104-
avatar: `img/avatar-${getRandomNumber(1, 6)}.svg`,
105-
message: generateMessage(), // случайное сообщение из 1-2 фраз
106-
name: getRandomElement(NAMES), // случайное имя из списка
107-
});
108-
}
109-
110-
return comments;
111-
};
112-
113-
// Функция getPhoto
114-
const getPhoto = (i) => ({
115-
id: i,
116-
url: `photos/${i}.jpg`,
117-
description: getRandomElement(DESCRIPTION),
118-
likes: getRandomNumber(MIN_LIKES, MAX_LIKES),
119-
comments: getComments(),
120-
});
121-
122-
// Исправленная функция getPhotos (была рекурсия, теперь правильно)
123-
const getPhotos = (n) => {
124-
const photos = [];
125-
for (let i = 1; i <= n; i++) {
126-
photos.push(getPhoto(i)); // было getPhotos(i) — это вызывало рекурсию
127-
}
128-
return photos;
129-
};
130-
131-
// eslint-disable-next-line no-console
132-
console.log(getPhotos(25));

js/utils.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Функция getRandomNumber
2+
export const getRandomNumber = (min, max) => {
3+
const left = Math.ceil(Math.min(min, max));
4+
const right = Math.floor(Math.max(min, max));
5+
const random = Math.random() * (right - left + 1) + left;
6+
return Math.floor(random);
7+
};
8+
9+
//Функция getRandomElement
10+
export const getRandomElement = (items) => items[getRandomNumber(0, items.length - 1)];

0 commit comments

Comments
 (0)