Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Модуляция #4

Merged
merged 8 commits into from
Dec 9, 2024
430 changes: 223 additions & 207 deletions index.html

Large diffs are not rendered by default.

54 changes: 54 additions & 0 deletions js/comments.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import {generateUniqueInteger, getRandomInteger, getRandomArrayElements} from './util.js';

const COMMENTS_COUNT = {
MIN: 0,
MAX: 30
};

const AVATARS_COUNT = {
MIN: 0,
MAX: 6
};

const SENTENCES_COUNT = {
MIN: 0,
MAX: 4
};

const RANDOM_RANGE = {
MIN: 0,
MAX: 10000
};

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


const NAMES = ['Алексей', 'Мария', 'Иван', 'Екатерина', 'Дмитрий', 'Ольга', 'Николай', 'Анна', 'Сергей', 'Елена',
'Владимир', 'Татьяна', 'Артур', 'Наталья', 'Павел', 'Ирина', 'Кирилл', 'Светлана', 'Максим', 'Юлия'];

function getRandomComments() {
const comments = [];
const getUniqueCommentIdValue = generateUniqueInteger(getRandomInteger, RANDOM_RANGE.MIN, RANDOM_RANGE.MAX);
const commentsCount = getRandomInteger(COMMENTS_COUNT.MIN, COMMENTS_COUNT.MAX);

for (let j = 0; j < commentsCount; j++) {
const commentId = getUniqueCommentIdValue();
const avatar = `img/avatar-${getRandomInteger(AVATARS_COUNT.MIN, AVATARS_COUNT.MAX)}.svg`;
const commentsList = getRandomArrayElements(MESSAGES, getRandomInteger, SENTENCES_COUNT.MAX);
const name = getRandomArrayElements(NAMES, getRandomInteger);

comments.push({
commentId,
avatar,
commentsList,
name
});
}
return comments;
}

export {getRandomComments};
160 changes: 4 additions & 156 deletions js/main.js
Original file line number Diff line number Diff line change
@@ -1,158 +1,6 @@
const OBJECTS_COUNT = {
MIN: 0,
MAX: 26
};
import {getRandomPhotoObjects} from './photos.js';

const COMMENTS_COUNT = {
MIN: 0,
MAX: 30
};
const OBJECTS_COUNT = 26;

const AVATARS_COUNT = {
MIN: 0,
MAX: 6
};

const SENTENCES_COUNT = {
MIN: 0,
MAX: 4
};

const LIKES_COUNT = {
MIN: 15,
MAX: 200
};

const RANDOM_VALUE = {
MIN: 0,
MAX: 100000
};

const PHOTO_DESCRIPTIONS = ['Закат над океаном',
'Густой лес в тумане', 'Старая каменная башня', 'Поле с подсолнухами', 'Заснеженные горы на рассвете',
'Уличное кафе в Париже', 'Тихий пляж с белым песком', 'Пейзаж с речкой и мостиком', 'Яркий фейерверк ночью',
'Городская улица в дождь', 'Цветущий сад весной', 'Корабль в открытом море', 'Тропа в осеннем лесу',
'Кошка на подоконнике', 'Ночное небо с луной', 'Живописный водопад', 'Рынок со свежими фруктами',
'Древние руины в пустыне', 'Скала у побережья', 'Группа воздушных шаров в небе', 'Кофе и книги на столе',
'Пастбище с коровами', 'Детский парк с аттракционами', 'Чайный домик в Японии', 'Маяк на скалистом берегу',
'Озеро с отражением леса', 'Снежная деревня зимой', 'Песчаные дюны в пустыне', 'Романтический мост в вечернем свете',
'Улица с цветными домами', 'Яхты в маленькой гавани', 'Кристально чистое горное озеро', 'Поле с маковыми цветами',
'Маленькая хижина в горах', 'Закат в тропиках', 'Стадо оленей на рассвете', 'Городской парк с фонтаном',
'Облачный горизонт над мегаполисом', 'Гребной канал с лодками', 'Старинный замок в горах'];

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


const NAMES = ['Алексей', 'Мария', 'Иван', 'Екатерина', 'Дмитрий', 'Ольга', 'Николай', 'Анна', 'Сергей', 'Елена',
'Владимир', 'Татьяна', 'Артур', 'Наталья', 'Павел', 'Ирина', 'Кирилл', 'Светлана', 'Максим', 'Юлия'];

function getRandomPhotoObjects({ photoGeneratorParameters }) {
const {
paramCount,
paramGetRandomInteger,
paramGetUniqueValue,
paramDescriptions,
paramObjectsCount,
paramLikesCount,
} = photoGeneratorParameters;

const objects = [];
const getUniquePhotoIdValue = paramGetUniqueValue(paramGetRandomInteger, paramObjectsCount.MIN, paramObjectsCount.MAX);
const getUniqueUrlValue = paramGetUniqueValue(paramGetRandomInteger, paramObjectsCount.MIN, paramObjectsCount.MAX);


for (let i = 0; i < paramCount; i++) {
const comments = getRandomComments();

const photoId = getUniquePhotoIdValue();
const url = getUniqueUrlValue();
const description = paramDescriptions[paramGetRandomInteger(0, paramDescriptions.length)];
const likes = paramGetRandomInteger(paramLikesCount.MIN, paramLikesCount.MAX);

objects.push({
photoId,
url,
description,
likes,
comments
});
}

return objects;
}

function getRandomComments() {
const comments = [];
const getUniqueCommentIdValue = getUniqueValue(getRandomInteger, RANDOM_VALUE.MIN, RANDOM_VALUE.MAX);
const commentsCount = getRandomInteger(COMMENTS_COUNT.MIN, COMMENTS_COUNT.MAX);

for (let j = 0; j < commentsCount; j++) {
const commentId = getUniqueCommentIdValue();
const avatar = `img/avatar-${getRandomInteger(AVATARS_COUNT.MIN, AVATARS_COUNT.MAX)}.svg`;
const commentsList = getRandomArrayElements(MESSAGES, getRandomInteger, SENTENCES_COUNT.MAX);
const name = getRandomArrayElements(NAMES, getRandomInteger);

comments.push({
commentId,
avatar,
commentsList,
name
});
}
return comments;
}

function getUniqueValue(getRandomInt, min, max) {
const previousValues = [];

return function () {
let currentValue = getRandomInt(min, max);
if (previousValues.length >= (max - min + 1)) {
return null;
}
while (previousValues.includes(currentValue)) {
currentValue = getRandomInteger(min, max);
}
previousValues.push(currentValue);
return currentValue;
};
}

function getRandomArrayElements(array, getRandomInt, maxLength = 1) {
const elements = [];
for (let i = 0; i < maxLength; i++) {
elements.push(array[getRandomInt(0, array.length)]);
}

return elements.join(' ');
}

function getRandomInteger(min, max) {
const lower = Math.ceil(Math.min(Math.abs(min), Math.abs(max)));
const upper = Math.floor(Math.max(Math.abs(min), Math.abs(max)));
const result = Math.random() * (upper - lower + 1) + lower;

return Math.floor(result);
}

const parameters = {
paramCount: OBJECTS_COUNT.MAX,
paramGetRandomInteger: getRandomInteger,
paramGetUniqueValue: getUniqueValue,
paramGetRandomArrayElements: getRandomArrayElements,
paramDescriptions: PHOTO_DESCRIPTIONS,
paramRandomValue: RANDOM_VALUE,
paramObjectsCount: OBJECTS_COUNT,
paramCommentsCount: COMMENTS_COUNT,
paramAvatarsCount: AVATARS_COUNT,
paramSentencesCount: SENTENCES_COUNT,
paramLikesCount: LIKES_COUNT,
paramMessages: MESSAGES,
paramNames: NAMES
};

const generatedObjects = getRandomPhotoObjects({photoGeneratorParameters: parameters});
const generatedObjects = getRandomPhotoObjects(OBJECTS_COUNT);
console.log(generatedObjects);

Check failure on line 6 in js/main.js

View workflow job for this annotation

GitHub Actions / Check

Unexpected console statement
56 changes: 56 additions & 0 deletions js/photos.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import {generateUniqueInteger, getRandomInteger} from './util.js';
import {getRandomComments} from './comments.js';

const LIKES_COUNT = {
MIN: 15,
MAX: 200
};

const ID_RANGE = {
MIN: 1,
MAX: 25
};

const URL_RANGE = {
MIN: 1,
MAX: 25
};

const PHOTO_DESCRIPTIONS = ['Закат над океаном',
'Густой лес в тумане', 'Старая каменная башня', 'Поле с подсолнухами', 'Заснеженные горы на рассвете',
'Уличное кафе в Париже', 'Тихий пляж с белым песком', 'Пейзаж с речкой и мостиком', 'Яркий фейерверк ночью',
'Городская улица в дождь', 'Цветущий сад весной', 'Корабль в открытом море', 'Тропа в осеннем лесу',
'Кошка на подоконнике', 'Ночное небо с луной', 'Живописный водопад', 'Рынок со свежими фруктами',
'Древние руины в пустыне', 'Скала у побережья', 'Группа воздушных шаров в небе', 'Кофе и книги на столе',
'Пастбище с коровами', 'Детский парк с аттракционами', 'Чайный домик в Японии', 'Маяк на скалистом берегу',
'Озеро с отражением леса', 'Снежная деревня зимой', 'Песчаные дюны в пустыне', 'Романтический мост в вечернем свете',
'Улица с цветными домами', 'Яхты в маленькой гавани', 'Кристально чистое горное озеро', 'Поле с маковыми цветами',
'Маленькая хижина в горах', 'Закат в тропиках', 'Стадо оленей на рассвете', 'Городской парк с фонтаном',
'Облачный горизонт над мегаполисом', 'Гребной канал с лодками', 'Старинный замок в горах'];

function getRandomPhotoObjects(objectsCount) {
const objects = [];
const getUniquePhotoIdValue = generateUniqueInteger(getRandomInteger, ID_RANGE.MIN, ID_RANGE.MAX);
const getUniqueUrlValue = generateUniqueInteger(getRandomInteger, URL_RANGE.MIN, URL_RANGE.MAX);

for (let i = 0; i < objectsCount - 1; i++) {
const comments = getRandomComments();

const photoId = getUniquePhotoIdValue();
const url = `photos/${getUniqueUrlValue()}.jpg`;
const description = PHOTO_DESCRIPTIONS[getRandomInteger(0, PHOTO_DESCRIPTIONS.length - 1)];
const likes = getRandomInteger(LIKES_COUNT.MIN, LIKES_COUNT.MAX);

objects.push({
photoId,
url,
description,
likes,
comments
});
}

return objects;
}

export {getRandomPhotoObjects};
35 changes: 35 additions & 0 deletions js/util.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
function generateUniqueInteger(getRandomInt, min, max) {
const previousValues = [];

return function () {
let currentValue = getRandomInt(min, max);
if (previousValues.length >= (max - min + 1)) {
return null;
}
while (previousValues.includes(currentValue)) {
currentValue = getRandomInteger(min, max);
}
previousValues.push(currentValue);
return currentValue;
};
}

function getRandomArrayElements(array, getRandomInt, maxLength = 1) {
const elements = [];
for (let i = 0; i < maxLength; i++) {
elements.push(array[getRandomInt(0, array.length)]);
}

return elements.join(' ');
}

function getRandomInteger(min, max) {
const lower = Math.ceil(Math.min(Math.abs(min), Math.abs(max)));
const upper = Math.floor(Math.max(Math.abs(min), Math.abs(max)));
const result = Math.random() * (upper - lower + 1) + lower;

const floorResult = Math.floor(result);
return floorResult;
}

export {generateUniqueInteger, getRandomInteger, getRandomArrayElements};
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "kekstagram",
"version": "31.0.0",
"private": true,
"type": "module",
"description": "Личный проект «Кекстаграм» от HTML Academy",
"repository": {
"type": "git",
Expand Down
Loading