https://github.com/notacat1/mesto-project
"Mesto" is a web platform that provides the ability to create photo cards using JavaScript functionality. Here, users can share captivating locations and make them accessible to other participants. This way, a unique collection of moments and places is created, which can be explored and enjoyed.
https://github.com/notacat1/mesto-project
adaptive asynchronous asynchronous-programming bem bem-methodology css html javascript js json oop-principles yandex-praktikum
Last synced: about 2 months ago
JSON representation
"Mesto" is a web platform that provides the ability to create photo cards using JavaScript functionality. Here, users can share captivating locations and make them accessible to other participants. This way, a unique collection of moments and places is created, which can be explored and enjoyed.
- Host: GitHub
- URL: https://github.com/notacat1/mesto-project
- Owner: NotACat1
- Created: 2023-05-24T18:44:48.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2023-10-20T13:16:17.000Z (over 1 year ago)
- Last Synced: 2025-01-11T10:17:31.817Z (4 months ago)
- Topics: adaptive, asynchronous, asynchronous-programming, bem, bem-methodology, css, html, javascript, js, json, oop-principles, yandex-praktikum
- Language: JavaScript
- Homepage: https://notacat1.github.io/mesto-project/
- Size: 3.08 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Mesto

## О проекте
[Mesto](https://notacat1.github.io/mesto-project/) - это веб-платформа предоставляет возможность создавать фотокарточки, используя функциональность JavaScript. Здесь пользователи могут делиться захватывающими местами и делать их доступными для других участников. Таким образом, создается уникальная коллекция моментов и мест, которые можно исследовать и наслаждаться.
## Реализованный функционал
### 1. Добавление карточки
Создание новой фотокарточки и добавление ее в галерею предоставляют уникальную возможность для каждого пользователя. Здесь вы можете поделиться увлекательными снимками и получить оценку от других участников, создавая вместе невероятно разнообразную и интересную коллекцию изображений.
https://github.com/NotACat1/mesto-project/assets/113008873/567ae8d8-637c-4eba-855c-844cd0910421
### 2. Лайк карточки
Возможность ставить лайки к выложенным фотокарточкам доступна для каждого пользователя. Эта функция позволяет выразить свою позитивную реакцию на фотографии других пользователей и поделиться своим восхищением. С помощью нажатия на кнопку "Лайк" пользователи могут показать, что фотокарточка вызвала у них интерес или понравилась.
https://github.com/NotACat1/mesto-project/assets/113008873/78482e45-3aca-490f-bd05-339bafa2c088
### 3. Удаление карточки
Возможность удаления собственных фотокарточек - это важная функция, которая дает пользователям полный контроль над их контентом и опытом в приложении или на платформе. Эта функция обеспечивает гибкость и управляемость для пользователей, позволяя им самостоятельно решать, какой контент оставить, а какой удалить.
https://github.com/NotACat1/mesto-project/assets/113008873/384b610b-38b0-4abd-9724-3e509475fbbe
#### Подтверждение удаления
Использование всплывающего окна (попапа) для подтверждения удаления фотокарточки - это эффективный способ защиты пользователя от случайного удаления контента. Этот дополнительный уровень подтверждения позволяет убедиться, что пользователь осознанно принимает решение о удалении, и уменьшает вероятность ошибки.

### 4. Открытие попапа с картинкой
При клике на фотографию фотокарточки пользователь может открыть изображение в полноэкранном режиме, чтобы более детально рассмотреть и ознакомиться с ней. Эта функция позволяет предоставить более углубленный и визуально насыщенный опыт для пользователей.
https://github.com/NotACat1/mesto-project/assets/113008873/64d41488-cbb3-4e53-8aed-ad3da577c952
### 5. Валидация форм
Валидация форм на стороне клиента является важной частью оптимизации пользовательского опыта при заполнении данных в формах на веб-сайте или в приложении. Она предоставляет мгновенную обратную связь пользователю о том, что он ввел некорректные данные до отправки формы на сервер.
https://github.com/NotACat1/mesto-project/assets/113008873/f9f02cf9-9ac5-4d98-bbae-86cbe56a45d5
### 6. Редактирование профиля
Редактирование профиля - это функциональность, которая предоставляет пользователям возможность изменить различные аспекты своего профиля, такие как никнейм и описание. Эта функция позволяет пользователям поддерживать актуальность информации и настраивать свой профиль по своему усмотрению.
https://github.com/NotACat1/mesto-project/assets/113008873/d811f304-574c-42cd-85d6-297bb014080e
### 7. Смена аватарки пользователя
Смена аватарки пользователя предоставляет возможность пользователям обновить свое изображение профиля, что способствует индивидуализации и актуализации их визуального представления в онлайн-среде.

### 8. Закрытие попапа
Закрытие всплывающего окна (попапа) - это процесс скрытия окна, которое было открыто поверх основного контента страницы. Закрытие попапа обеспечивает пользователю возможность вернуться к основному контенту и продолжить взаимодействие с интерфейсом.
#### 8.1 Закрытие попапа по нажатию кнопки
Закрытие попапа при помощи нажатия на кнопку-крестик - это распространенный и интуитивно понятный способ завершения взаимодействия с всплывающим окном.
https://github.com/NotACat1/mesto-project/assets/113008873/3ac67af5-cb75-4cd2-b198-bf16e1996d0b
#### 8.2 Закрытие попапа по нажатию на оверлей
Закрытие попапа по нажатию на оверлей (область вне самого попапа) - это эффективный способ закрыть всплывающее окно и вернуться к основному контенту. Этот метод предоставляет пользователю простой способ закрыть попап.
https://github.com/NotACat1/mesto-project/assets/113008873/28beccde-915a-4f3a-9ace-bda91d5a06e8
#### 8.3 Закрытие попапа по нажатию клавиши Esc (Escape)
Закрытие попапа по нажатию клавиши "Esc" (Escape) - это удобная и стандартная функциональность, которая обеспечивает быстрый и интуитивный способ закрыть всплывающее окно.
#### 9. Объектно-ориентированное программирование (ООП)
В данном проекте использование объектно-ориентированного программирования (ООП) имеет ключевое значение для создания структурированного и легко управляемого кода. Применение ООП позволяет разделить функциональность на отдельные объекты с собственными свойствами и методами, что способствует повышению читаемости, переиспользуемости и масштабируемости проекта.
#### 10. Методология БЭМ (Блок-Элемент-Модификатор)
Применение методологии БЭМ (Блок-Элемент-Модификатор) в проекте дополняет применение объектно-ориентированного программирования (ООП), создавая структурированный и модульный подход к организации кода и стилей. Методология БЭМ ориентирована на создание понятной и семантически верной разметки и стилей, что способствует легкости сопровождения и расширения проекта.
## Используемые технологии
### 1. Normalize.css
[Normalize.css](https://necolas.github.io/normalize.css/) предоставляет браузерам возможность более последовательного отображения всех элементов согласно современным стандартам. Он акцентируется на нормализации только тех стилей, которые действительно требуют коррекции.
```css
/* index.css */
@import url(../vendor/normalize.css);
```### 2. Webpack
[Webpack](https://webpack.js.org/) - это инструмент с открытым исходным кодом для сборки веб-приложений. Он позволяет объединять различные файлы, такие как HTML, CSS, JavaScript, изображения, в единый пакет для оптимизированной доставки на веб-сервер. Webpack также поддерживает использование различных загрузчиков и плагинов, что облегчает процесс разработки, минимизации и управления зависимостями.
Настройки Webpack:
```js
// webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');module.exports = {
entry: {
main: './src/pages/index.js'
},
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'main.js',
publicPath: '',
},
mode: 'development',
devServer: {
static: path.resolve(__dirname, './dist'),
open: true,
compress: true,
port: 8080
},
module: {
rules: [{
test: /\.js$/,
use: 'babel-loader',
exclude: '/node_modules/'
},
{
test: /\.(png|svg|jpg|jpeg|gif)$/,
type: 'asset/resource',
generator: {
filename: 'images/[name].[hash][ext]',
}
},
{
test: /\.(woff|woff2|eot|ttf|otf)$/i,
type: 'asset/resource',
generator: {
filename: 'fonts/[name].[hash][ext]',
}
},
{
test: /\.css$/,
use: [MiniCssExtractPlugin.loader, {
loader: 'css-loader',
options: {
importLoaders: 1
}
},
'postcss-loader'
]
},
]
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
}),
new CleanWebpackPlugin(),
new MiniCssExtractPlugin(),]
}
```#### 2.1 Babel
[Babel](https://babeljs.io/) - это инструмент для транспиляции кода на JavaScript. Он позволяет разработчикам писать код, используя современные функции языка, которые могут быть не поддержаны всеми браузерами. Babel преобразует этот код в совместимый с более старыми версиями браузеров, обеспечивая кросс-браузерную поддержку и совместимость.
Настройки Babel:
```js
// babel.config.js
const presets = [
['@babel/preset-env', {
targets: {
edge: '17',
ie: '11',
firefox: '50',
chrome: '64',
safari: '11.1'
},
useBuiltIns: "entry"
}]
];
module.exports = { presets };
```#### 2.2 PostCSS
[PostCSS](https://postcss.org/) - это инструмент для обработки и трансформации кода CSS. Он позволяет разработчикам применять различные плагины к CSS коду, автоматизируя задачи, такие как автопрефиксинг, оптимизация, генерация переменных и многое другое. PostCSS гибкий и настраиваемый, что позволяет адаптировать его под конкретные потребности проекта.
Настройки PostCSS:
```js
// postcss.config.js
const autoprefixer = require('autoprefixer');
const cssnano = require('cssnano');
module.exports = {
plugins: [
autoprefixer,
cssnano({ preset: 'default' })
]
};
```