-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #3 from harl-i/module4-task1
- Loading branch information
Showing
2 changed files
with
158 additions
and
54 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,158 @@ | ||
const OBJECTS_COUNT = { | ||
MIN: 0, | ||
MAX: 26 | ||
}; | ||
|
||
const COMMENTS_COUNT = { | ||
MIN: 0, | ||
MAX: 30 | ||
}; | ||
|
||
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}); | ||