Compare commits
16 Commits
main
...
7fa9e60bab
| Author | SHA1 | Date | |
|---|---|---|---|
| 7fa9e60bab | |||
| ae4a4e755f | |||
| 229187dd4e | |||
| 632835f834 | |||
| f7afa74bed | |||
| 205bb0f195 | |||
| 0ead01438a | |||
| 1940a8e172 | |||
| 801a6cac28 | |||
| 684c9d7675 | |||
| e0cf8ff04b | |||
| cdb7405b1f | |||
| 7d3a3de5ab | |||
| b8882af0da | |||
| 1e887a95f4 | |||
| 345eebb6f8 |
151
basket.css
@@ -1,151 +0,0 @@
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
height: 1200px;
|
||||
font-size: 18px;
|
||||
font-family: sans-serif;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
a:link,
|
||||
a:visited {
|
||||
color: #dbe2ef;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.header {
|
||||
position: fixed;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
height: 90px;
|
||||
background: #112d4e;
|
||||
padding: 0;
|
||||
color: #dbe2ef;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.logo-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.logo img {
|
||||
width: 75px;
|
||||
height: 75px;
|
||||
border-radius: 15px;
|
||||
margin-left: 10px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
margin: 0 20px;
|
||||
font-size: 1.5em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.menu {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
list-style-type: none;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.menu > li {
|
||||
margin-right: 30px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.menu > li:last-of-type {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.dropdown {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.dropdown > a {
|
||||
cursor: pointer;
|
||||
color: #dbe2ef;
|
||||
}
|
||||
|
||||
.dropdown:hover .features-menu {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.features-menu {
|
||||
display: none;
|
||||
flex-direction: column;
|
||||
background: #b2d6ff;
|
||||
border-radius: 5px;
|
||||
padding-top: 10px;
|
||||
position: absolute;
|
||||
top: 40px;
|
||||
left: 0;
|
||||
z-index: 1;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.features-menu li {
|
||||
border-bottom: 1px solid #fff;
|
||||
font-size: 0.8em;
|
||||
width: 100%;
|
||||
padding: 10px 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.features-menu li:last-of-type {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.features-menu a {
|
||||
color: #112d4e;
|
||||
}
|
||||
|
||||
.sad{
|
||||
padding-top: 150px;
|
||||
color: #00264d;
|
||||
text-align: center;
|
||||
padding-bottom: 100px;
|
||||
}
|
||||
|
||||
.footer {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 20px;
|
||||
background-color: #00264d;
|
||||
color: #b2d6ff;
|
||||
}
|
||||
|
||||
.social-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.social {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.social h2, .social h1 {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.contact-info {
|
||||
text-align: right;
|
||||
}
|
||||
170
basket.html
@@ -2,57 +2,133 @@
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>cyxaruk shop catalog</title>
|
||||
<link rel="stylesheet" href="basket.css" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>cyxaruk shop basket</title>
|
||||
<link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
|
||||
<link rel="stylesheet" href="./styles.css" />
|
||||
|
||||
<style>
|
||||
@media (min-width: 992px) {
|
||||
.navbar .dropdown:hover .dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
.navbar .dropdown .dropdown-menu {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* прижимаем футер вниз */
|
||||
html, body {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
main {
|
||||
flex: 1; /* растягивается, чтобы футер был внизу */
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<a href="main.html" class="logo">
|
||||
<img src="фотки/cyxaruk shop logo.jpg" alt="сухарик шоп">
|
||||
</a>
|
||||
<h1>cyxaruk shop</h1>
|
||||
<ul class="menu">
|
||||
<li class="dropdown">
|
||||
<a href="catalog.html">Catalog ▾</a>
|
||||
<ul class="features-menu">
|
||||
<li><a href="#">For Men</a></li>
|
||||
<li><a href="#">For Women</a></li>
|
||||
<li><a href="#">For Kids</a></li>
|
||||
<li><a href="#">Order from abroad</a></li>
|
||||
<nav class="navbar navbar-expand-lg navbar-dark" style="background-color: #00264d;">
|
||||
<div class="container">
|
||||
<a class="navbar-brand d-flex align-items-center" href="main.html">
|
||||
<img src="img/cyxaruk shop logo.jpg" alt="логотип" width="50" height="50" class="rounded-circle me-2">
|
||||
<span class="fw-bold">cyxaruk shop</span>
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="catalog.html" id="navbarDropdown" role="button"
|
||||
data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="bi bi-list-ul me-1"></i>Каталог
|
||||
</a>
|
||||
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-gender-male me-2"></i>Для мужчин</a></li>
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-gender-female me-2"></i>Для женщин</a></li>
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-globe me-2"></i>Заказ из-за границы</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="contacts.html"><i class="bi bi-telephone me-1"></i>Контакты</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="likes.html"><i class="bi bi-heart me-1"></i>Избранное</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="basket.html"><i class="bi bi-cart me-1"></i>Корзина</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="contacts.html">Contacts</a></li>
|
||||
<li><a href="likes.html">Likes</a></li>
|
||||
<li><a href="basket.html">
|
||||
<img src="фотки/basket.png" width="50" height="50" alt="корзина">
|
||||
</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="sad">
|
||||
<h1>Здесь будут лежать твои товары, <br/> а пока здесь так пусто...</h1>
|
||||
<img src="фотки/sad1.jpg">
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<div class="social-container">
|
||||
<div class="social">
|
||||
<a href="https://t.me/cyxarukShop">
|
||||
<img src="фотки/telega.png" width="100" height="100" alt="Telegram">
|
||||
</a>
|
||||
<h2>← also follow us on tg</h2>
|
||||
</div>
|
||||
<div class="social">
|
||||
<a href="https://www.avito.ru/brands/6f43f8798e9eb61c3350f391762e98b3/all/odezhda_obuv_aksessuary?gdlkerfdnwq=101&page_from=from_item_card&iid=3935618105&sellerId=81d843720716be16ce230bba484bce75">
|
||||
<img src="фотки/avito.png" width="80" height="80" alt="Avito">
|
||||
</a>
|
||||
<h1>← and avito</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="contact-info">
|
||||
<h2>89876320523</h2>
|
||||
<h2>Ulyanovsk, Russia</h2>
|
||||
</nav>
|
||||
|
||||
<main class="container my-4">
|
||||
<div class="empty-basket text-center py-5">
|
||||
<h1 class="mb-4">Здесь будут лежать твои товары</h1>
|
||||
<p class="lead mb-4">А пока здесь так пусто...</p>
|
||||
<img src="img/sad1.jpg" alt="Пустая корзина" class="img-fluid rounded" style="max-height: 300px;">
|
||||
<div class="mt-4">
|
||||
<a href="catalog.html" class="btn btn-lg" style="background-color: #00264d; color: white;">
|
||||
<i class="bi bi-arrow-left me-2"></i>Вернуться в каталог
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="basketContainer"></div>
|
||||
</main>
|
||||
|
||||
<footer class="py-4 mt-5" style="background-color: #00264d; color: white;">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3 mb-md-0">
|
||||
<div class="d-flex align-items-center mb-3">
|
||||
<a href="https://t.me/cyxarukShop" class="text-white me-3">
|
||||
<i class="bi bi-telegram fs-2"></i>
|
||||
</a>
|
||||
<span>Подпишитесь на нас в Telegram</span>
|
||||
</div>
|
||||
<div class="d-flex align-items-center">
|
||||
<a href="https://www.avito.ru/..." class="text-white me-3">
|
||||
<i class="bi bi-shop-window fs-2"></i>
|
||||
</a>
|
||||
<span>Мы на Авито</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 text-md-end">
|
||||
<h5>Контакты</h5>
|
||||
<p><i class="bi bi-telephone me-2"></i>89876320523</p>
|
||||
<p><i class="bi bi-geo-alt me-2"></i>Ulyanovsk, Russia</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
<script type="module">
|
||||
import { Model } from '/components/basket/model.js';
|
||||
import { View } from '/components/basket/view.js';
|
||||
import { Controller } from '/components/basket/controller.js';
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
if (document.getElementById('basketContainer') || document.getElementById('productsContainer')) {
|
||||
const model = new Model();
|
||||
const view = new View();
|
||||
new Controller(model, view);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
||||
187
catalog.css
@@ -1,187 +0,0 @@
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
height: 1200px;
|
||||
font-size: 18px;
|
||||
font-family: sans-serif;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
a:link,
|
||||
a:visited {
|
||||
color: #dbe2ef;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.header {
|
||||
position: fixed;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
height: 90px;
|
||||
background: #112d4e;
|
||||
padding: 0;
|
||||
color: #dbe2ef;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.logo-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.logo img {
|
||||
width: 75px;
|
||||
height: 75px;
|
||||
border-radius: 15px;
|
||||
margin-left: 10px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
margin: 0 20px;
|
||||
font-size: 1.5em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.menu {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
list-style-type: none;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.menu > li {
|
||||
margin-right: 30px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.menu > li:last-of-type {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.dropdown {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.dropdown > a {
|
||||
cursor: pointer;
|
||||
color: #dbe2ef;
|
||||
}
|
||||
|
||||
.dropdown:hover .features-menu {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.features-menu {
|
||||
display: none;
|
||||
flex-direction: column;
|
||||
background: #b2d6ff;
|
||||
border-radius: 5px;
|
||||
padding-top: 10px;
|
||||
position: absolute;
|
||||
top: 40px;
|
||||
left: 0;
|
||||
z-index: 1;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.features-menu li {
|
||||
border-bottom: 1px solid #fff;
|
||||
font-size: 0.8em;
|
||||
width: 100%;
|
||||
padding: 10px 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.features-menu li:last-of-type {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.features-menu a {
|
||||
color: #112d4e;
|
||||
}
|
||||
|
||||
.card {
|
||||
padding-top: 50px;
|
||||
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
|
||||
width: 350px;
|
||||
margin: auto;
|
||||
text-align: center;
|
||||
font-family: arial;
|
||||
}
|
||||
|
||||
.price {
|
||||
color: grey;
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
.card button {
|
||||
border: none;
|
||||
outline: 0;
|
||||
padding: 12px;
|
||||
color: white;
|
||||
background-color: #00264d;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
width: 100%;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.card button:hover {
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.cards {
|
||||
display: grid;
|
||||
/* Автоматически заполняем на всю ширину grid-контейнера */
|
||||
grid-template-columns: repeat(auto-fill, 400px);
|
||||
width: 100%;
|
||||
justify-content: center;
|
||||
justify-items: center; /* Размещаем карточку по центру */
|
||||
column-gap: 60px; /* Отступ между колонками */
|
||||
row-gap: 40px; /* Отступ между рядами */
|
||||
margin: 0 auto;
|
||||
padding-bottom: 50px;
|
||||
padding-top: 50px;
|
||||
}
|
||||
|
||||
.footer {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 20px;
|
||||
background-color: #00264d;
|
||||
color: #b2d6ff;
|
||||
}
|
||||
|
||||
.social-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.social {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.social h2, .social h1 {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.contact-info {
|
||||
text-align: right;
|
||||
}
|
||||
518
catalog.html
@@ -2,107 +2,449 @@
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>cyxaruk shop catalog</title>
|
||||
<link rel="stylesheet" href="catalog.css" />
|
||||
<link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
|
||||
<link rel="stylesheet" href="./styles.css" />
|
||||
<style>
|
||||
.like-btn.liked {
|
||||
color: #000000 !important;
|
||||
border-color: #dc3545 !important;
|
||||
}
|
||||
.like-btn.liked i {
|
||||
color: #dc3545 !important;
|
||||
}
|
||||
/* Черная оконтовка при наведении на нажатую кнопку */
|
||||
.like-btn.liked:hover i {
|
||||
text-shadow: 0 0 2px #000000,
|
||||
0 0 2px #000000,
|
||||
0 0 2px #000000;
|
||||
}
|
||||
/* Плавное изменение */
|
||||
.like-btn i {
|
||||
transition: text-shadow 0.2s ease;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<a href="main.html" class="logo">
|
||||
<img src="фотки/cyxaruk shop logo.jpg" alt="сухарик шоп">
|
||||
</a>
|
||||
<h1>cyxaruk shop</h1>
|
||||
<ul class="menu">
|
||||
<li class="dropdown">
|
||||
<a href="catalog.html">Catalog ▾</a>
|
||||
<ul class="features-menu">
|
||||
<li><a href="#">For Men</a></li>
|
||||
<li><a href="#">For Women</a></li>
|
||||
<li><a href="#">For Kids</a></li>
|
||||
<li><a href="#">Order from abroad</a></li>
|
||||
<nav class="navbar navbar-expand-lg navbar-dark" style="background-color: #00264d;">
|
||||
<div class="container">
|
||||
<a class="navbar-brand d-flex align-items-center" href="main.html">
|
||||
<img src="img/cyxaruk shop logo.jpg" alt="логотип" width="50" height="50" class="rounded-circle me-2">
|
||||
<span class="fw-bold">cyxaruk shop</span>
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="catalog.html" id="navbarDropdown" role="button"
|
||||
data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="bi bi-list-ul me-1"></i>Каталог
|
||||
</a>
|
||||
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-gender-male me-2"></i>Для мужчин</a></li>
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-gender-female me-2"></i>Для женщин</a></li>
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-globe me-2"></i>Заказ из-за границы</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="contacts.html"><i class="bi bi-telephone me-1"></i>Контакты</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="likes.html"><i class="bi bi-heart me-1"></i>Избранное</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="basket.html"><i class="bi bi-cart me-1"></i>Корзина</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="contacts.html">Contacts</a></li>
|
||||
<li><a href="likes.html">Likes</a></li>
|
||||
<li><a href="basket.html">
|
||||
<img src="фотки/basket.png" width="50" height="50" alt="корзина">
|
||||
</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<h1 style="text-align:center">Карточка товара</h1>
|
||||
<style>
|
||||
@media (min-width: 992px) {
|
||||
.navbar .dropdown:hover .dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
.navbar .dropdown .dropdown-menu {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="cards">
|
||||
<div class="card">
|
||||
<img src="фотки/stonik.jpg" alt="Стон" style="width:100%">
|
||||
<h1>Stone Island</h1>
|
||||
<p class="price">$1999.99</p>
|
||||
<p>super idol rovny pacan,<br/> groza rayona, mother's modnik,<br/> патч на месте</p>
|
||||
<p><button>Добавить в корзину</button></p>
|
||||
<main class="container my-4">
|
||||
<div class="accordion" id="accordionExample">
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header" id="headingOne">
|
||||
<button class="accordion-button" type="button" data-bs-toggle="collapse" style="background-color: #b0d8ff;" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
|
||||
Добавить товар
|
||||
</button>
|
||||
</h2>
|
||||
<div id="collapseOne" class="accordion-collapse collapse show" aria-labelledby="headingOne" data-bs-parent="#accordionExample">
|
||||
<div class="accordion-body">
|
||||
<div class="card mb-4 border-0 shadow">
|
||||
<div class="card-body">
|
||||
<form id="addProductForm" class="row g-3">
|
||||
<div class="col-md-6">
|
||||
<label for="productName" class="form-label">Название товара</label>
|
||||
<input type="text" class="form-control" id="productName" required>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="productPrice" class="form-label">Цена</label>
|
||||
<input type="text" class="form-control" id="productPrice" required>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="productCategory" class="form-label">Категория</label>
|
||||
<select class="form-select" id="productCategory" required>
|
||||
<option value="">Выберите категорию</option>
|
||||
<option value="1">Для мужчин</option>
|
||||
<option value="2">Для женщин</option>
|
||||
<option value="3">Унисекс</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="productCondition" class="form-label">Состояние</label>
|
||||
<select class="form-select" id="productCondition" required>
|
||||
<option value="">Выберите состояние</option>
|
||||
<option value="1">Новый</option>
|
||||
<option value="2">Б/У</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<label for="productDescription" class="form-label">Описание</label>
|
||||
<textarea class="form-control" id="productDescription" rows="3" required></textarea>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<label for="productImage" class="form-label">Ссылка на изображение</label>
|
||||
<input type="text" class="form-control" id="productImage" required>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<button type="submit" class="btn" style="background-color: #00264d; color: white;">
|
||||
<i class="bi bi-check-circle me-2"></i>Добавить товар
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<img src="фотки/napapisaj.jpg" alt="Напапири" style="width:100%">
|
||||
<h1>Napapisaj</h1>
|
||||
<p class="price">$1499.99</p>
|
||||
<p>super idol rovny pacan,<br/> groza rayona, mother's modnik,<br/> +rep from brothers</p>
|
||||
<p><button>Добавить в корзину</button></p>
|
||||
</div>
|
||||
<h1 class="text-center mb-4 mt-2">Каталог товаров</h1>
|
||||
<!-- Карточки товаров -->
|
||||
<div class="row row-cols-1 row-cols-md-2 row-cols-lg-3 g-4 mb-5" id="productsContainer">
|
||||
<!-- Карточка товара 1 -->
|
||||
<div class="col">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<img src="img/stonik.jpg" class="card-img-top" alt="Stone Island">
|
||||
<div class="card-body">
|
||||
<h4 class="card-title">Stone Island</h4>
|
||||
<p class="card-text">super idol rovny pacan, groza rayona, mother's modnik, патч на месте</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Category:</h5>
|
||||
<p class="card-text">men</p>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Condition:</h5>
|
||||
<p class="card-text">new</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer bg-transparent">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<span class="text-muted">$1999.99</span>
|
||||
<button class="btn btn-sm" style="background-color: #00264d; color: white;">
|
||||
<i class="bi bi-cart-plus me-1"></i>В корзину
|
||||
</button>
|
||||
</div>
|
||||
<div class="mt-2 d-flex justify-content-between">
|
||||
<button class="btn btn-sm btn-outline-secondary like-btn">
|
||||
<i class="bi bi-heart"></i> В избранное
|
||||
</button>
|
||||
<button class="btn btn-sm btn-outline-secondary">
|
||||
<i class="bi bi-share"></i> Поделиться
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Карточка товара 2 -->
|
||||
<div class="col">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<img src="img/adidas.jpg" class="card-img-top" alt="Adidas">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Adidas</h5>
|
||||
<p class="card-text">sportik, street, baskemtball, air, old school</p>
|
||||
|
||||
<div class="card">
|
||||
<img src="фотки/adidas.jpg" alt="адиадс" style="width:100%">
|
||||
<h1>Adidas</h1>
|
||||
<p class="price">$19.99</p>
|
||||
<p>sportik, street,<br/> baskemtball, air, <br>old school</p>
|
||||
<p><button>Добавить в корзину</button></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Category:</h5>
|
||||
<p class="card-text">men</p>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Condition:</h5>
|
||||
<p class="card-text">wu</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer bg-transparent">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<span class="text-muted">$19.99</span>
|
||||
<button class="btn btn-sm" style="background-color: #00264d; color: white;">
|
||||
<i class="bi bi-cart-plus me-1"></i>В корзину
|
||||
</button>
|
||||
</div>
|
||||
<div class="mt-2 d-flex justify-content-between">
|
||||
<button class="btn btn-sm btn-outline-secondary like-btn">
|
||||
<i class="bi bi-heart"></i> В избранное
|
||||
</button>
|
||||
<button class="btn btn-sm btn-outline-secondary">
|
||||
<i class="bi bi-share"></i> Поделиться
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="cards">
|
||||
<div class="card">
|
||||
<img src="фотки/fred perry.jpg" alt="перри" style="width:100%">
|
||||
<h1>Fred Perry</h1>
|
||||
<p class="price">$1299.99</p>
|
||||
<p>style, nice, <br/>mother's modnik, cotton, <br/>the platypus</p>
|
||||
<p><button>Добавить в корзину</button></p>
|
||||
</div>
|
||||
<!-- Карточка товара 3 -->
|
||||
<div class="col">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<img src="img/napapisaj.jpg" class="card-img-top" alt="Napapisaj">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Napapisaj</h5>
|
||||
<p class="card-text">super idol rovny pacan, groza rayona, mother's modnik, +rep from brothers</p>
|
||||
|
||||
<div class="card">
|
||||
<img src="фотки/samba.png" alt="самба" style="width:100%">
|
||||
<h1>Adidas Samba</h1>
|
||||
<p class="price">$449.99</p>
|
||||
<p>super idol rovny pacan,<br/> groza rayona, mother's modnik,<br/> +rep from brothers</p>
|
||||
<p><button>Добавить в корзину</button></p>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Category:</h5>
|
||||
<p class="card-text">men</p>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Condition:</h5>
|
||||
<p class="card-text">wu</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer bg-transparent">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<span class="text-muted">$1499.99</span>
|
||||
<button class="btn btn-sm" style="background-color: #00264d; color: white;">
|
||||
<i class="bi bi-cart-plus me-1"></i>В корзину
|
||||
</button>
|
||||
</div>
|
||||
<div class="mt-2 d-flex justify-content-between">
|
||||
<button class="btn btn-sm btn-outline-secondary like-btn">
|
||||
<i class="bi bi-heart"></i> В избранное
|
||||
</button>
|
||||
<button class="btn btn-sm btn-outline-secondary">
|
||||
<i class="bi bi-share"></i> Поделиться
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<img src="фотки/lacoste.png" alt="лакост" style="width:100%">
|
||||
<h1>Lacoste</h1>
|
||||
<p class="price">$299.99</p>
|
||||
<p>tyle, nice, <br/>mother's modnik, cotton, <br/>krokodil</p>
|
||||
<p><button>Добавить в корзину</button></p>
|
||||
<!-- Карточка товара 4 -->
|
||||
<div class="col">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<img src="img/lacoste.png" class="card-img-top" alt="Lacoste">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Lacoste</h5>
|
||||
<p class="card-text">style, nice, mother's modnik, cotton, krokodil</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Category:</h5>
|
||||
<p class="card-text">uni</p>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Condition:</h5>
|
||||
<p class="card-text">wu</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer bg-transparent">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<span class="text-muted">$399.99</span>
|
||||
<button class="btn btn-sm" style="background-color: #00264d; color: white;">
|
||||
<i class="bi bi-cart-plus me-1"></i>В корзину
|
||||
</button>
|
||||
</div>
|
||||
<div class="mt-2 d-flex justify-content-between">
|
||||
<button class="btn btn-sm btn-outline-secondary like-btn">
|
||||
<i class="bi bi-heart"></i> В избранное
|
||||
</button>
|
||||
<button class="btn btn-sm btn-outline-secondary">
|
||||
<i class="bi bi-share"></i> Поделиться
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Карточка товара 5 -->
|
||||
<div class="col">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<img src="img/samba.png" class="card-img-top" alt="Samba">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Samba</h5>
|
||||
<p class="card-text">super idol rovny pacan, groza rayona, mother's modnik, +rep from brothers</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Category:</h5>
|
||||
<p class="card-text">women</p>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Condition:</h5>
|
||||
<p class="card-text">new</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer bg-transparent">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<span class="text-muted">$449.99</span>
|
||||
<button class="btn btn-sm" style="background-color: #00264d; color: white;">
|
||||
<i class="bi bi-cart-plus me-1"></i>В корзину
|
||||
</button>
|
||||
</div>
|
||||
<div class="mt-2 d-flex justify-content-between">
|
||||
<button class="btn btn-sm btn-outline-secondary like-btn">
|
||||
<i class="bi bi-heart"></i> В избранное
|
||||
</button>
|
||||
<button class="btn btn-sm btn-outline-secondary">
|
||||
<i class="bi bi-share"></i> Поделиться
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="py-4 mt-5" style="background-color: #00264d; color: white;">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3 mb-md-0">
|
||||
<div class="d-flex align-items-center mb-3">
|
||||
<a href="https://t.me/cyxarukShop" class="text-white me-3">
|
||||
<i class="bi bi-telegram fs-2"></i>
|
||||
</a>
|
||||
<span>Подпишитесь на нас в Telegram</span>
|
||||
</div>
|
||||
<div class="d-flex align-items-center">
|
||||
<a href="https://www.avito.ru/..." class="text-white me-3">
|
||||
<i class="bi bi-shop-window fs-2"></i>
|
||||
</a>
|
||||
<span>Мы на Авито</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 text-md-end">
|
||||
<h5>Контакты</h5>
|
||||
<p><i class="bi bi-telephone me-2"></i>89876320523</p>
|
||||
<p><i class="bi bi-geo-alt me-2"></i>Ulyanovsk, Russia</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
<script>
|
||||
document.getElementById("addProductForm").addEventListener("submit", function (e) {
|
||||
e.preventDefault();
|
||||
const name = document.getElementById("productName").value;
|
||||
const price = document.getElementById("productPrice").value;
|
||||
const category = document.getElementById("productCategory").value;
|
||||
const condition = document.getElementById("productCondition").value;
|
||||
const description = document.getElementById("productDescription").value;
|
||||
const image = document.getElementById("productImage").value;
|
||||
|
||||
// Получаем текстовые значения для отображения
|
||||
const categoryText = document.getElementById("productCategory").options[document.getElementById("productCategory").selectedIndex].text;
|
||||
const conditionText = document.getElementById("productCondition").options[document.getElementById("productCondition").selectedIndex].text;
|
||||
|
||||
const productCard = `
|
||||
<div class="col">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<img src="${image}" class="card-img-top" alt="${name}">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">${name}</h5>
|
||||
<p class="card-text">${description}</p>
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Category:</h5>
|
||||
<p class="card-text">${categoryText}</p>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Condition:</h5>
|
||||
<p class="card-text">${conditionText}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer bg-transparent">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<span class="text-muted">${price}</span>
|
||||
<button class="btn btn-sm" style="background-color: #00264d; color: white;">
|
||||
<i class="bi bi-cart-plus me-1"></i>В корзину
|
||||
</button>
|
||||
</div>
|
||||
<div class="mt-2 d-flex justify-content-between">
|
||||
<button class="btn btn-sm btn-outline-secondary like-btn">
|
||||
<i class="bi bi-heart"></i> В избранное
|
||||
</button>
|
||||
<button class="btn btn-sm btn-outline-secondary">
|
||||
<i class="bi bi-share"></i> Поделиться
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
document.getElementById("productsContainer").insertAdjacentHTML("beforeend", productCard);
|
||||
this.reset();
|
||||
});
|
||||
</script>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
<script type="module">
|
||||
import { LikesModel } from '/components/likes/model.js';
|
||||
import { LikesView } from '/components/likes/view.js';
|
||||
import { LikesController } from '/components/likes/controller.js';
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
if (document.getElementById('productsContainer')) {
|
||||
const likesModel = new LikesModel();
|
||||
const likesView = new LikesView();
|
||||
new LikesController(likesModel, likesView);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="module">
|
||||
import { Model } from '/components/basket/model.js';
|
||||
import { View } from '/components/basket/view.js';
|
||||
import { Controller } from '/components/basket/controller.js';
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
if (document.getElementById('basketContainer') || document.getElementById('productsContainer')) {
|
||||
const model = new Model();
|
||||
const view = new View();
|
||||
new Controller(model, view);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<div class="footer">
|
||||
<div class="social-container">
|
||||
<div class="social">
|
||||
<a href="https://t.me/cyxarukShop">
|
||||
<img src="фотки/telega.png" width="100" height="100" alt="Telegram">
|
||||
</a>
|
||||
<h2>← also follow us on tg</h2>
|
||||
</div>
|
||||
<div class="social">
|
||||
<a href="https://www.avito.ru/brands/6f43f8798e9eb61c3350f391762e98b3/all/odezhda_obuv_aksessuary?gdlkerfdnwq=101&page_from=from_item_card&iid=3935618105&sellerId=81d843720716be16ce230bba484bce75">
|
||||
<img src="фотки/avito.png" width="80" height="80" alt="Avito">
|
||||
</a>
|
||||
<h1>← and avito</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="contact-info">
|
||||
<h2>89876320523</h2>
|
||||
<h2>Ulyanovsk, Russia</h2>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
133
components/basket/controller.js
Normal file
@@ -0,0 +1,133 @@
|
||||
// controller.js
|
||||
export class Controller {
|
||||
constructor(model, view) {
|
||||
this.model = model;
|
||||
this.view = view;
|
||||
this.init();
|
||||
}
|
||||
|
||||
async init() {
|
||||
// Для страницы корзины
|
||||
if (window.location.pathname.includes('basket.html')) {
|
||||
await this.loadBasket();
|
||||
this.setupBasketEventListeners();
|
||||
}
|
||||
|
||||
// Для страницы каталога
|
||||
if (window.location.pathname.includes('catalog.html')) {
|
||||
this.setupCatalogEventListeners();
|
||||
}
|
||||
}
|
||||
|
||||
// Загрузить и отобразить корзину
|
||||
async loadBasket() {
|
||||
const basketItems = await this.model.getBasketItems();
|
||||
this.view.showBasket(basketItems);
|
||||
}
|
||||
|
||||
// Настройка обработчиков событий для корзины
|
||||
setupBasketEventListeners() {
|
||||
document.addEventListener('click', async (e) => {
|
||||
const basketItem = e.target.closest('.basket-item');
|
||||
if (!basketItem) return;
|
||||
|
||||
const productId = basketItem.dataset.id;
|
||||
|
||||
// Удаление товара
|
||||
if (e.target.closest('.remove-btn')) {
|
||||
await this.model.removeFromBasket(productId);
|
||||
this.view.showNotification('Товар удален из корзины');
|
||||
await this.loadBasket();
|
||||
}
|
||||
|
||||
// Увеличение количества
|
||||
if (e.target.closest('.increase-btn')) {
|
||||
const quantityInput = basketItem.querySelector('.quantity-input');
|
||||
const newQuantity = parseInt(quantityInput.value) + 1;
|
||||
quantityInput.value = newQuantity;
|
||||
await this.model.updateBasketItem(productId, newQuantity);
|
||||
await this.loadBasket();
|
||||
}
|
||||
|
||||
// Уменьшение количества
|
||||
if (e.target.closest('.decrease-btn')) {
|
||||
const quantityInput = basketItem.querySelector('.quantity-input');
|
||||
let newQuantity = parseInt(quantityInput.value) - 1;
|
||||
if (newQuantity < 1) newQuantity = 1;
|
||||
quantityInput.value = newQuantity;
|
||||
await this.model.updateBasketItem(productId, newQuantity);
|
||||
await this.loadBasket();
|
||||
}
|
||||
});
|
||||
|
||||
// Обработка изменения количества через input
|
||||
document.addEventListener('change', async (e) => {
|
||||
if (e.target.classList.contains('quantity-input')) {
|
||||
const basketItem = e.target.closest('.basket-item');
|
||||
const productId = basketItem.dataset.id;
|
||||
const newQuantity = parseInt(e.target.value) || 1;
|
||||
|
||||
if (newQuantity < 1) {
|
||||
e.target.value = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
await this.model.updateBasketItem(productId, newQuantity);
|
||||
await this.loadBasket();
|
||||
}
|
||||
});
|
||||
|
||||
// Оформление заказа
|
||||
document.addEventListener('click', async (e) => {
|
||||
if (e.target.id === 'checkoutBtn') {
|
||||
const basketItems = await this.model.getBasketItems();
|
||||
if (basketItems.length === 0) {
|
||||
this.view.showNotification('Корзина пуста', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
this.view.showNotification('Заказ оформлен! Спасибо за покупку!');
|
||||
await this.model.clearBasket();
|
||||
await this.loadBasket();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Настройка обработчиков событий для каталога
|
||||
setupCatalogEventListeners() {
|
||||
document.addEventListener('click', async (e) => {
|
||||
if (e.target.closest('.btn') && e.target.closest('.btn').textContent.includes('В корзину')) {
|
||||
const card = e.target.closest('.card');
|
||||
const product = this.extractProductData(card);
|
||||
|
||||
if (product) {
|
||||
await this.model.addToBasket(product);
|
||||
this.view.showNotification('Товар добавлен в корзину!');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
extractProductData(card) {
|
||||
try {
|
||||
const name = card.querySelector('.card-title').textContent;
|
||||
const priceText = card.querySelector('.text-muted').textContent.replace('$', '');
|
||||
const description = card.querySelector('.card-text').textContent;
|
||||
const image = card.querySelector('img').src;
|
||||
|
||||
// Генерируем ID на основе содержимого карточки
|
||||
const id = btoa(`${name}-${priceText}`).substring(0, 8);
|
||||
|
||||
return {
|
||||
id: id,
|
||||
name: name.trim(),
|
||||
price: parseFloat(priceText),
|
||||
description: description.trim(),
|
||||
image: image
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('Ошибка при извлечении данных товара:', error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
118
components/basket/model.js
Normal file
@@ -0,0 +1,118 @@
|
||||
// model.js
|
||||
export class Model {
|
||||
constructor() {
|
||||
this.apiUrl = 'http://localhost:3000';
|
||||
}
|
||||
|
||||
async request(url, options = {}) {
|
||||
try {
|
||||
const response = await fetch(`${this.apiUrl}${url}`, {
|
||||
...options,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
...options.headers
|
||||
}
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! status: ${response.status}`);
|
||||
}
|
||||
|
||||
return await response.json();
|
||||
} catch (error) {
|
||||
console.error('Request failed:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
async getBasketItems() {
|
||||
try {
|
||||
return await this.request('/basket');
|
||||
} catch (error) {
|
||||
console.error('Ошибка при получении корзины:', error);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
// Добавить товар в корзину
|
||||
async addToBasket(product) {
|
||||
try {
|
||||
// Проверяем, есть ли товар уже в корзине
|
||||
const basketItems = await this.getBasketItems();
|
||||
const existingItem = basketItems.find(item => item.id === product.id);
|
||||
|
||||
if (existingItem) {
|
||||
// Если товар уже есть, увеличиваем количество
|
||||
await this.updateBasketItem(product.id, existingItem.quantity + 1);
|
||||
} else {
|
||||
// Если товара нет, добавляем новый
|
||||
const basketItem = {
|
||||
...product,
|
||||
quantity: 1,
|
||||
addedAt: new Date().toISOString()
|
||||
};
|
||||
|
||||
const response = await fetch(`${this.apiUrl}/basket`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(basketItem)
|
||||
});
|
||||
return await response.json();
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Ошибка при добавлении в корзину:', error);
|
||||
}
|
||||
}
|
||||
|
||||
// Обновить количество товара в корзине
|
||||
async updateBasketItem(productId, quantity) {
|
||||
try {
|
||||
const response = await fetch(`${this.apiUrl}/basket/${productId}`, {
|
||||
method: 'PATCH',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({ quantity })
|
||||
});
|
||||
return await response.json();
|
||||
} catch (error) {
|
||||
console.error('Ошибка при обновлении корзины:', error);
|
||||
}
|
||||
}
|
||||
|
||||
// Удалить товар из корзины
|
||||
async removeFromBasket(productId) {
|
||||
try {
|
||||
await fetch(`${this.apiUrl}/basket/${productId}`, {
|
||||
method: 'DELETE'
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Ошибка при удалении из корзины:', error);
|
||||
}
|
||||
}
|
||||
|
||||
// Очистить корзину
|
||||
async clearBasket() {
|
||||
try {
|
||||
const basketItems = await this.getBasketItems();
|
||||
for (const item of basketItems) {
|
||||
await this.removeFromBasket(item.id);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Ошибка при очистке корзины:', error);
|
||||
}
|
||||
}
|
||||
|
||||
// Получить все товары из каталога
|
||||
async getProducts() {
|
||||
try {
|
||||
const response = await fetch(`${this.apiUrl}/shmots`);
|
||||
return await response.json();
|
||||
} catch (error) {
|
||||
console.error('Ошибка при получении товаров:', error);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
113
components/basket/view.js
Normal file
@@ -0,0 +1,113 @@
|
||||
// view.js
|
||||
export class View {
|
||||
constructor() {
|
||||
this.basketContainer = document.getElementById('basketContainer');
|
||||
this.emptyBasketElement = document.querySelector('.empty-basket');
|
||||
}
|
||||
|
||||
// Показать корзину с товарами
|
||||
showBasket(items) {
|
||||
if (items.length === 0) {
|
||||
this.showEmptyBasket();
|
||||
return;
|
||||
}
|
||||
|
||||
this.hideEmptyBasket();
|
||||
|
||||
const basketHTML = items.map(item => this.createBasketItemHTML(item)).join('');
|
||||
this.basketContainer.innerHTML = `
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card border-0 shadow">
|
||||
<div class="card-header" style="background-color: #00264d; color: white;">
|
||||
<h5 class="mb-0"><i class="bi bi-cart me-2"></i>Корзина</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
${basketHTML}
|
||||
<div class="d-flex justify-content-between align-items-center mt-4 pt-3 border-top">
|
||||
<h5>Итого: $${this.calculateTotal(items).toFixed(2)}</h5>
|
||||
<button class="btn btn-lg" style="background-color: #00264d; color: white;" id="checkoutBtn">
|
||||
<i class="bi bi-credit-card me-2"></i>Оформить заказ
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
// Создать HTML для элемента корзины
|
||||
createBasketItemHTML(item) {
|
||||
return `
|
||||
<div class="row align-items-center mb-3 basket-item" data-id="${item.id}">
|
||||
<div class="col-md-2">
|
||||
<img src="${item.image}" alt="${item.name}" class="img-fluid rounded" style="max-height: 80px;">
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<h6 class="mb-1">${item.name}</h6>
|
||||
<p class="text-muted small mb-0">${item.description}</p>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<span class="fw-bold">$${item.price}</span>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<div class="input-group input-group-sm">
|
||||
<button class="btn btn-outline-secondary decrease-btn" type="button">-</button>
|
||||
<input type="number" class="form-control text-center quantity-input" value="${item.quantity}" min="1">
|
||||
<button class="btn btn-outline-secondary increase-btn" type="button">+</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<span class="fw-bold me-3">$${(item.price * item.quantity).toFixed(2)}</span>
|
||||
<button class="btn btn-sm btn-outline-danger remove-btn">
|
||||
<i class="bi bi-trash"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
// Показать пустую корзину
|
||||
showEmptyBasket() {
|
||||
if (this.emptyBasketElement) {
|
||||
this.emptyBasketElement.style.display = 'block';
|
||||
}
|
||||
if (this.basketContainer) {
|
||||
this.basketContainer.innerHTML = '';
|
||||
}
|
||||
}
|
||||
|
||||
// Скрыть сообщение о пустой корзине
|
||||
hideEmptyBasket() {
|
||||
if (this.emptyBasketElement) {
|
||||
this.emptyBasketElement.style.display = 'none';
|
||||
}
|
||||
}
|
||||
|
||||
// Рассчитать общую сумму
|
||||
calculateTotal(items) {
|
||||
return items.reduce((total, item) => total + (item.price * item.quantity), 0);
|
||||
}
|
||||
|
||||
// Показать уведомление
|
||||
showNotification(message, type = 'success') {
|
||||
// Создаем элемент уведомления
|
||||
const notification = document.createElement('div');
|
||||
notification.className = `alert alert-${type === 'success' ? 'success' : 'danger'} alert-dismissible fade show`;
|
||||
notification.style.cssText = 'position: fixed; top: 20px; right: 20px; z-index: 1050; min-width: 300px;';
|
||||
notification.innerHTML = `
|
||||
${message}
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
|
||||
`;
|
||||
|
||||
document.body.appendChild(notification);
|
||||
|
||||
// Автоматически удаляем через 3 секунды
|
||||
setTimeout(() => {
|
||||
if (notification.parentNode) {
|
||||
notification.remove();
|
||||
}
|
||||
}, 3000);
|
||||
}
|
||||
}
|
||||
94
components/likes/controller.js
Normal file
@@ -0,0 +1,94 @@
|
||||
// components/likes/controller.js
|
||||
export class LikesController {
|
||||
constructor(model, view) {
|
||||
this.model = model;
|
||||
this.view = view;
|
||||
this.init();
|
||||
}
|
||||
|
||||
async init() {
|
||||
if (window.location.pathname.includes('likes.html')) {
|
||||
await this.loadLikes();
|
||||
this.setupLikesEventListeners();
|
||||
}
|
||||
|
||||
if (window.location.pathname.includes('catalog.html')) {
|
||||
this.setupCatalogEventListeners();
|
||||
}
|
||||
}
|
||||
|
||||
async loadLikes() {
|
||||
const items = await this.model.getLikesItems();
|
||||
this.view.showLikes(items);
|
||||
}
|
||||
|
||||
setupLikesEventListeners() {
|
||||
document.addEventListener('click', async (e) => {
|
||||
const likeItem = e.target.closest('.like-item');
|
||||
if (!likeItem) return;
|
||||
|
||||
const productId = likeItem.dataset.id;
|
||||
|
||||
// удалить
|
||||
if (e.target.closest('.remove-like-btn')) {
|
||||
await this.model.removeFromLikes(productId);
|
||||
this.view.showNotification('Товар удален из избранного');
|
||||
await this.loadLikes();
|
||||
}
|
||||
|
||||
// перенести в корзину
|
||||
if (e.target.closest('.move-to-basket-btn')) {
|
||||
const items = await this.model.getLikesItems();
|
||||
const product = items.find(item => item.id === productId);
|
||||
if (product) {
|
||||
await this.model.moveToBasket(product);
|
||||
this.view.showNotification('Товар перенесен в корзину');
|
||||
await this.loadLikes();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
setupCatalogEventListeners() {
|
||||
document.addEventListener('click', async (e) => {
|
||||
const card = e.target.closest('.card');
|
||||
if (!card) return;
|
||||
|
||||
if (e.target.closest('.like-btn')) {
|
||||
const product = this.extractProductData(card);
|
||||
if (product) {
|
||||
await this.model.addToLikes(product);
|
||||
this.view.showNotification('Товар добавлен в избранное!');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
extractProductData(card) {
|
||||
try {
|
||||
const name = card.querySelector('.card-title').textContent;
|
||||
const priceText = card.querySelector('.text-muted').textContent.replace('$', '');
|
||||
const description = card.querySelector('.card-text').textContent;
|
||||
const image = card.querySelector('img').src;
|
||||
|
||||
// ✅ Вытаскиваем category и condition
|
||||
const category = card.querySelector('.col-6:nth-child(1) p')?.textContent.trim() || '';
|
||||
const condition = card.querySelector('.col-6:nth-child(2) p')?.textContent.trim() || '';
|
||||
|
||||
const id = btoa(`${name}-${priceText}`).substring(0, 8);
|
||||
|
||||
return {
|
||||
id: id,
|
||||
name: name.trim(),
|
||||
price: parseFloat(priceText),
|
||||
description: description.trim(),
|
||||
image: image,
|
||||
category: category,
|
||||
condition: condition
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('Ошибка при извлечении данных товара:', error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
69
components/likes/model.js
Normal file
@@ -0,0 +1,69 @@
|
||||
// components/likes/model.js
|
||||
export class LikesModel {
|
||||
constructor() {
|
||||
this.apiUrl = 'http://localhost:3000';
|
||||
}
|
||||
|
||||
async request(url, options = {}) {
|
||||
const response = await fetch(`${this.apiUrl}${url}`, {
|
||||
...options,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
...options.headers
|
||||
}
|
||||
});
|
||||
if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
|
||||
return await response.json();
|
||||
}
|
||||
|
||||
async getLikesItems() {
|
||||
try {
|
||||
return await this.request('/likes');
|
||||
} catch (error) {
|
||||
console.error('Ошибка при получении избранного:', error);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
async addToLikes(product) {
|
||||
try {
|
||||
const items = await this.getLikesItems();
|
||||
const exists = items.find(item => item.id === product.id);
|
||||
if (!exists) {
|
||||
const response = await fetch(`${this.apiUrl}/likes`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(product)
|
||||
});
|
||||
return await response.json();
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Ошибка при добавлении в избранное:', error);
|
||||
}
|
||||
}
|
||||
|
||||
async removeFromLikes(productId) {
|
||||
try {
|
||||
await fetch(`${this.apiUrl}/likes/${productId}`, { method: 'DELETE' });
|
||||
} catch (error) {
|
||||
console.error('Ошибка при удалении из избранного:', error);
|
||||
}
|
||||
}
|
||||
|
||||
async moveToBasket(product) {
|
||||
try {
|
||||
// 1. Добавляем в корзину
|
||||
const basketRes = await fetch(`${this.apiUrl}/basket`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ ...product, quantity: 1, addedAt: new Date().toISOString() })
|
||||
});
|
||||
await basketRes.json();
|
||||
|
||||
// 2. Удаляем из избранного
|
||||
await this.removeFromLikes(product.id);
|
||||
} catch (error) {
|
||||
console.error('Ошибка при переносе товара в корзину:', error);
|
||||
}
|
||||
}
|
||||
}
|
||||
99
components/likes/view.js
Normal file
@@ -0,0 +1,99 @@
|
||||
// components/likes/view.js
|
||||
export class LikesView {
|
||||
constructor() {
|
||||
this.likesContainer = document.getElementById('likesContainer');
|
||||
this.emptyLikesElement = document.querySelector('.empty-likes');
|
||||
}
|
||||
|
||||
showLikes(items) {
|
||||
if (!this.likesContainer) return;
|
||||
|
||||
if (!items || items.length === 0) {
|
||||
this.showEmptyLikes();
|
||||
return;
|
||||
}
|
||||
|
||||
// 👉 Если товары есть — убираем блок "пусто"
|
||||
this.hideEmptyLikes();
|
||||
|
||||
const likesHTML = items.map(item => this.createLikesItemHTML(item)).join('');
|
||||
|
||||
// 👉 Добавляем заголовок "Избранное"
|
||||
this.likesContainer.innerHTML = `
|
||||
<h2 class="mb-4 text-center">Избранное</h2>
|
||||
<div class="row g-3">${likesHTML}</div>
|
||||
`;
|
||||
}
|
||||
|
||||
createLikesItemHTML(item) {
|
||||
return `
|
||||
<div class="col-md-4">
|
||||
<div class="card h-100 border-0 shadow like-item" data-id="${item.id}">
|
||||
<img src="${item.image}" class="card-img-top" alt="${item.name}">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">${item.name}</h5>
|
||||
<p class="card-text">${item.description}</p>
|
||||
|
||||
<!-- ✅ Добавляем Category и Condition -->
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h6 class="mb-1">Category:</h6>
|
||||
<p class="card-text">${item.category || '-'}</p>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<h6 class="mb-1">Condition:</h6>
|
||||
<p class="card-text">${item.condition || '-'}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="card-footer bg-transparent">
|
||||
<div class="d-flex justify-content-between align-items-end">
|
||||
<!-- Цена слева -->
|
||||
<span class="fw-bold text-muted fs-3 price-large">$${item.price}</span>
|
||||
|
||||
<!-- Кнопки справа -->
|
||||
<div class="d-flex flex-column gap-1">
|
||||
<button class="btn btn-sm btn-outline-primary move-to-basket-btn">
|
||||
<i class="bi bi-cart-plus"></i> В корзину
|
||||
</button>
|
||||
<button class="btn btn-sm btn-outline-danger remove-like-btn">
|
||||
<i class="bi bi-trash"></i> Удалить
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
showEmptyLikes() {
|
||||
if (this.emptyLikesElement) {
|
||||
this.emptyLikesElement.style.display = 'block';
|
||||
}
|
||||
if (this.likesContainer) {
|
||||
this.likesContainer.innerHTML = '';
|
||||
}
|
||||
}
|
||||
|
||||
hideEmptyLikes() {
|
||||
if (this.emptyLikesElement) {
|
||||
this.emptyLikesElement.style.display = 'none';
|
||||
}
|
||||
}
|
||||
|
||||
showNotification(message, type = 'success') {
|
||||
const notification = document.createElement('div');
|
||||
notification.className = `alert alert-${type === 'success' ? 'success' : 'danger'} alert-dismissible fade show`;
|
||||
notification.style.cssText = 'position: fixed; top: 20px; right: 20px; z-index: 1050; min-width: 300px;';
|
||||
notification.innerHTML = `
|
||||
${message}
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
|
||||
`;
|
||||
document.body.appendChild(notification);
|
||||
setTimeout(() => {
|
||||
if (notification.parentNode) notification.remove();
|
||||
}, 3000);
|
||||
}
|
||||
}
|
||||
163
contacts.css
@@ -1,163 +0,0 @@
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
height: 1200px;
|
||||
font-size: 18px;
|
||||
font-family: sans-serif;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
a:link,
|
||||
a:visited {
|
||||
color: #dbe2ef;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.header {
|
||||
position: fixed;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
height: 90px;
|
||||
background: #112d4e;
|
||||
padding: 0;
|
||||
color: #dbe2ef;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.logo-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.logo img {
|
||||
width: 75px;
|
||||
height: 75px;
|
||||
border-radius: 15px;
|
||||
margin-left: 10px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
margin: 0 20px;
|
||||
font-size: 1.5em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.menu {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
list-style-type: none;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.menu > li {
|
||||
margin-right: 30px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.menu > li:last-of-type {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.dropdown {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.dropdown > a {
|
||||
cursor: pointer;
|
||||
color: #dbe2ef;
|
||||
}
|
||||
|
||||
.dropdown:hover .features-menu {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.features-menu {
|
||||
display: none;
|
||||
flex-direction: column;
|
||||
background: #b2d6ff;
|
||||
border-radius: 5px;
|
||||
padding-top: 10px;
|
||||
position: absolute;
|
||||
top: 40px;
|
||||
left: 0;
|
||||
z-index: 1;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.features-menu li {
|
||||
border-bottom: 1px solid #fff;
|
||||
font-size: 0.8em;
|
||||
width: 100%;
|
||||
padding: 10px 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.features-menu li:last-of-type {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.features-menu a {
|
||||
color: #112d4e;
|
||||
}
|
||||
|
||||
.numbers{
|
||||
color: #00264d;
|
||||
padding-top: 100px;
|
||||
padding-bottom: 335px;
|
||||
}
|
||||
|
||||
table{
|
||||
color: #00264d;
|
||||
width: 60%;
|
||||
margin: 200px;
|
||||
margin-left: 20%;
|
||||
}
|
||||
|
||||
th, td {
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
.footer {
|
||||
position: relative;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 20px;
|
||||
background-color: #00264d;
|
||||
color: #b2d6ff;
|
||||
bottom: -10px;
|
||||
}
|
||||
|
||||
.social-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.social {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.social h2, .social h1 {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.contact-info {
|
||||
text-align: right;
|
||||
}
|
||||
221
contacts.html
@@ -2,80 +2,161 @@
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>cyxaruk shop contacts</title>
|
||||
<link rel="stylesheet" href="contacts.css" />
|
||||
<link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
|
||||
<link rel="stylesheet" href="css/styles.css" />
|
||||
<style>
|
||||
html, body {
|
||||
height: 100%;
|
||||
}
|
||||
body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
color: #00264d;
|
||||
}
|
||||
main {
|
||||
flex: 1 0 auto;
|
||||
}
|
||||
footer {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.table-custom {
|
||||
background-color: #00264d;
|
||||
color: white;
|
||||
}
|
||||
.table-custom thead th {
|
||||
background-color: #001a3a;
|
||||
color: white;
|
||||
}
|
||||
.table-custom tbody tr:hover {
|
||||
background-color: #003366;
|
||||
color: white;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<a href="main.html" class="logo">
|
||||
<img src="фотки/cyxaruk shop logo.jpg" alt="сухарик шоп">
|
||||
</a>
|
||||
<h1>cyxaruk shop</h1>
|
||||
<ul class="menu">
|
||||
<li class="dropdown">
|
||||
<a href="catalog.html">Catalog ▾</a>
|
||||
<ul class="features-menu">
|
||||
<li><a href="#">For Men</a></li>
|
||||
<li><a href="#">For Women</a></li>
|
||||
<li><a href="#">For Kids</a></li>
|
||||
<li><a href="#">Order from abroad</a></li>
|
||||
<nav class="navbar navbar-expand-lg navbar-dark" style="background-color: #00264d;">
|
||||
<div class="container">
|
||||
<a class="navbar-brand d-flex align-items-center" href="main.html">
|
||||
<img src="img/cyxaruk shop logo.jpg" alt="логотип" width="50" height="50" class="rounded-circle me-2">
|
||||
<span class="fw-bold">cyxaruk shop</span>
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="catalog.html" id="navbarDropdown" role="button"
|
||||
data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="bi bi-list-ul me-1"></i>Каталог
|
||||
</a>
|
||||
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-gender-male me-2"></i>Для мужчин</a></li>
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-gender-female me-2"></i>Для женщин</a></li>
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-globe me-2"></i>Заказ из-за границы</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="contacts.html"><i class="bi bi-telephone me-1"></i>Контакты</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="likes.html"><i class="bi bi-heart me-1"></i>Избранное</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="basket.html"><i class="bi bi-cart me-1"></i>Корзина</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="contacts.html">Contacts</a></li>
|
||||
<li><a href="likes.html">Likes</a></li>
|
||||
<li><a href="basket.html">
|
||||
<img src="фотки/basket.png" width="50" height="50" alt="корзина">
|
||||
</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<table border="3">
|
||||
<caption>
|
||||
Контакты(звонить только в поддержку)
|
||||
</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ФИО</th>
|
||||
<th>Должность</th>
|
||||
<th>Телефон</th>
|
||||
<th>Телеграмм</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Платонов Артемий Михайлович</td>
|
||||
<td>Администрация/продавец</td>
|
||||
<td>89876320523</td>
|
||||
<td>@RBCScyxaruk</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ауц Евгений Валерьевич</td>
|
||||
<td>Продавец/поддержка круглосуточная</td>
|
||||
<td>89021263060</td>
|
||||
<td>@yevgenauts</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<style>
|
||||
@media (min-width: 992px) {
|
||||
.navbar .dropdown:hover .dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
.navbar .dropdown .dropdown-menu {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<main class="container my-4">
|
||||
<h1 class="text-center mb-4">Контакты</h1>
|
||||
|
||||
<div class="card border-0 shadow-sm mb-4">
|
||||
<div class="card-header" style="background-color: #00264d; color: white;">
|
||||
<h5 class="mb-0"><i class="bi bi-info-circle me-2"></i>Контактная информация</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-custom table-striped table-hover">
|
||||
<caption class="text-dark">Контакты (звонить только в поддержку)</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ФИО</th>
|
||||
<th>Должность</th>
|
||||
<th>Телефон</th>
|
||||
<th>Телеграм</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Платонов Артемий Михайлович</td>
|
||||
<td>Администрация / продавец</td>
|
||||
<td>89876320523</td>
|
||||
<td>@RBCScyxaruk</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ауц Евгений Валерьевич</td>
|
||||
<td>Продавец / поддержка круглосуточная</td>
|
||||
<td>89021263060</td>
|
||||
<td>@yevgenauts</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Данилюк Анжела</td>
|
||||
<td>Продавец / консультант</td>
|
||||
<td>89176235020</td>
|
||||
<td>@bomzhela</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="py-4" style="background-color: #00264d; color: white;">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3 mb-md-0">
|
||||
<div class="d-flex align-items-center mb-3">
|
||||
<a href="https://t.me/cyxarukShop" class="text-white me-3">
|
||||
<i class="bi bi-telegram fs-2"></i>
|
||||
</a>
|
||||
<span>Подпишитесь на нас в Telegram</span>
|
||||
</div>
|
||||
<div class="d-flex align-items-center">
|
||||
<a href="https://www.avito.ru/..." class="text-white me-3">
|
||||
<i class="bi bi-shop-window fs-2"></i>
|
||||
</a>
|
||||
<span>Мы на Авито</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 text-md-end">
|
||||
<h5>Контакты</h5>
|
||||
<p><i class="bi bi-telephone me-2"></i>89876320523</p>
|
||||
<p><i class="bi bi-geo-alt me-2"></i>Ulyanovsk, Russia</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<div class="footer">
|
||||
<div class="social-container">
|
||||
<div class="social">
|
||||
<a href="https://t.me/cyxarukShop">
|
||||
<img src="фотки/telega.png" width="100" height="100" alt="Telegram">
|
||||
</a>
|
||||
<h2>← also follow us on tg</h2>
|
||||
</div>
|
||||
<div class="social">
|
||||
<a href="https://www.avito.ru/brands/6f43f8798e9eb61c3350f391762e98b3/all/odezhda_obuv_aksessuary?gdlkerfdnwq=101&page_from=from_item_card&iid=3935618105&sellerId=81d843720716be16ce230bba484bce75">
|
||||
<img src="фотки/avito.png" width="80" height="80" alt="Avito">
|
||||
</a>
|
||||
<h1>← and avito</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="contact-info">
|
||||
<h2>89876320523</h2>
|
||||
<h2>Ulyanovsk, Russia</h2>
|
||||
</div>
|
||||
</div>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
75
db.json
Normal file
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"shmots": [
|
||||
{
|
||||
"id": "1",
|
||||
"name": "stone island",
|
||||
"price": 1999.99,
|
||||
"description": "super idol rovny pacan, groza rayona, mother's modnik, патч на месте",
|
||||
"image": "img/stonik.jpg",
|
||||
"category": "1",
|
||||
"condition": "1"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"name": "adidas",
|
||||
"price": 19.99,
|
||||
"description": "sportik, street, baskemtball, air, old school",
|
||||
"image": "img/adidas.jpg",
|
||||
"category": "1",
|
||||
"condition": "2"
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"name": "napapisaj",
|
||||
"price": 1499.99,
|
||||
"description": "super idol rovny pacan, groza rayona, mother's modnik, +rep from brothers",
|
||||
"image": "img/napapisaj.jpg",
|
||||
"category": "1",
|
||||
"condition": "2"
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"name": "samba",
|
||||
"price": 449.99,
|
||||
"description": "super idol rovny pacan, groza rayona, mother's modnik, +rep from brothers",
|
||||
"image": "img/samba.jpg",
|
||||
"category": "2",
|
||||
"condition": "1"
|
||||
},
|
||||
{
|
||||
"id": "5",
|
||||
"name": "lacoste",
|
||||
"price": 399.99,
|
||||
"description": "style, nice, mother's modnik, cotton, krokodil",
|
||||
"image": "img/lacoste.jpg",
|
||||
"category": "1",
|
||||
"condition": "1"
|
||||
}
|
||||
],
|
||||
"category": [
|
||||
{
|
||||
"id": "1",
|
||||
"name": "men"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"name": "women"
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"name": "uni"
|
||||
}
|
||||
],
|
||||
"condition": [
|
||||
{
|
||||
"id": "1",
|
||||
"name": "new"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"name": "wu"
|
||||
}
|
||||
],
|
||||
"likes": [],
|
||||
"basket": []
|
||||
}
|
||||
|
Before Width: | Height: | Size: 219 KiB After Width: | Height: | Size: 219 KiB |
BIN
dist/assets/ava-DiHUHyvl.jpg
vendored
Normal file
|
After Width: | Height: | Size: 12 KiB |
49
dist/assets/controller-BHzoImTo.js
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
class r{constructor(){this.apiUrl="http://localhost:3000"}async request(t,s={}){try{const e=await fetch(`${this.apiUrl}${t}`,{...s,headers:{"Content-Type":"application/json",...s.headers}});if(!e.ok)throw new Error(`HTTP error! status: ${e.status}`);return await e.json()}catch(e){throw console.error("Request failed:",e),e}}async getBasketItems(){try{return await this.request("/basket")}catch(t){return console.error("Ошибка при получении корзины:",t),[]}}async addToBasket(t){try{const e=(await this.getBasketItems()).find(a=>a.id===t.id);if(e)await this.updateBasketItem(t.id,e.quantity+1);else{const a={...t,quantity:1,addedAt:new Date().toISOString()};return await(await fetch(`${this.apiUrl}/basket`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)})).json()}}catch(s){console.error("Ошибка при добавлении в корзину:",s)}}async updateBasketItem(t,s){try{return await(await fetch(`${this.apiUrl}/basket/${t}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({quantity:s})})).json()}catch(e){console.error("Ошибка при обновлении корзины:",e)}}async removeFromBasket(t){try{await fetch(`${this.apiUrl}/basket/${t}`,{method:"DELETE"})}catch(s){console.error("Ошибка при удалении из корзины:",s)}}async clearBasket(){try{const t=await this.getBasketItems();for(const s of t)await this.removeFromBasket(s.id)}catch(t){console.error("Ошибка при очистке корзины:",t)}}async getProducts(){try{return await(await fetch(`${this.apiUrl}/shmots`)).json()}catch(t){return console.error("Ошибка при получении товаров:",t),[]}}}class c{constructor(){this.basketContainer=document.getElementById("basketContainer"),this.emptyBasketElement=document.querySelector(".empty-basket")}showBasket(t){if(t.length===0){this.showEmptyBasket();return}this.hideEmptyBasket();const s=t.map(e=>this.createBasketItemHTML(e)).join("");this.basketContainer.innerHTML=`
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card border-0 shadow">
|
||||
<div class="card-header" style="background-color: #00264d; color: white;">
|
||||
<h5 class="mb-0"><i class="bi bi-cart me-2"></i>Корзина</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
${s}
|
||||
<div class="d-flex justify-content-between align-items-center mt-4 pt-3 border-top">
|
||||
<h5>Итого: $${this.calculateTotal(t).toFixed(2)}</h5>
|
||||
<button class="btn btn-lg" style="background-color: #00264d; color: white;" id="checkoutBtn">
|
||||
<i class="bi bi-credit-card me-2"></i>Оформить заказ
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`}createBasketItemHTML(t){return`
|
||||
<div class="row align-items-center mb-3 basket-item" data-id="${t.id}">
|
||||
<div class="col-md-2">
|
||||
<img src="${t.image}" alt="${t.name}" class="img-fluid rounded" style="max-height: 80px;">
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<h6 class="mb-1">${t.name}</h6>
|
||||
<p class="text-muted small mb-0">${t.description}</p>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<span class="fw-bold">$${t.price}</span>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<div class="input-group input-group-sm">
|
||||
<button class="btn btn-outline-secondary decrease-btn" type="button">-</button>
|
||||
<input type="number" class="form-control text-center quantity-input" value="${t.quantity}" min="1">
|
||||
<button class="btn btn-outline-secondary increase-btn" type="button">+</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<span class="fw-bold me-3">$${(t.price*t.quantity).toFixed(2)}</span>
|
||||
<button class="btn btn-sm btn-outline-danger remove-btn">
|
||||
<i class="bi bi-trash"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
`}showEmptyBasket(){this.emptyBasketElement&&(this.emptyBasketElement.style.display="block"),this.basketContainer&&(this.basketContainer.innerHTML="")}hideEmptyBasket(){this.emptyBasketElement&&(this.emptyBasketElement.style.display="none")}calculateTotal(t){return t.reduce((s,e)=>s+e.price*e.quantity,0)}showNotification(t,s="success"){const e=document.createElement("div");e.className=`alert alert-${s==="success"?"success":"danger"} alert-dismissible fade show`,e.style.cssText="position: fixed; top: 20px; right: 20px; z-index: 1050; min-width: 300px;",e.innerHTML=`
|
||||
${t}
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
|
||||
`,document.body.appendChild(e),setTimeout(()=>{e.parentNode&&e.remove()},3e3)}}class l{constructor(t,s){this.model=t,this.view=s,this.init()}async init(){window.location.pathname.includes("basket.html")&&(await this.loadBasket(),this.setupBasketEventListeners()),window.location.pathname.includes("catalog.html")&&this.setupCatalogEventListeners()}async loadBasket(){const t=await this.model.getBasketItems();this.view.showBasket(t)}setupBasketEventListeners(){document.addEventListener("click",async t=>{const s=t.target.closest(".basket-item");if(!s)return;const e=s.dataset.id;if(t.target.closest(".remove-btn")&&(await this.model.removeFromBasket(e),this.view.showNotification("Товар удален из корзины"),await this.loadBasket()),t.target.closest(".increase-btn")){const a=s.querySelector(".quantity-input"),i=parseInt(a.value)+1;a.value=i,await this.model.updateBasketItem(e,i),await this.loadBasket()}if(t.target.closest(".decrease-btn")){const a=s.querySelector(".quantity-input");let i=parseInt(a.value)-1;i<1&&(i=1),a.value=i,await this.model.updateBasketItem(e,i),await this.loadBasket()}}),document.addEventListener("change",async t=>{if(t.target.classList.contains("quantity-input")){const e=t.target.closest(".basket-item").dataset.id,a=parseInt(t.target.value)||1;if(a<1){t.target.value=1;return}await this.model.updateBasketItem(e,a),await this.loadBasket()}}),document.addEventListener("click",async t=>{if(t.target.id==="checkoutBtn"){if((await this.model.getBasketItems()).length===0){this.view.showNotification("Корзина пуста","error");return}this.view.showNotification("Заказ оформлен! Спасибо за покупку!"),await this.model.clearBasket(),await this.loadBasket()}})}setupCatalogEventListeners(){document.addEventListener("click",async t=>{if(t.target.closest(".btn")&&t.target.closest(".btn").textContent.includes("В корзину")){const s=t.target.closest(".card"),e=this.extractProductData(s);e&&(await this.model.addToBasket(e),this.view.showNotification("Товар добавлен в корзину!"))}})}extractProductData(t){try{const s=t.querySelector(".card-title").textContent,e=t.querySelector(".text-muted").textContent.replace("$",""),a=t.querySelector(".card-text").textContent,i=t.querySelector("img").src;return{id:btoa(`${s}-${e}`).substring(0,8),name:s.trim(),price:parseFloat(e),description:a.trim(),image:i}}catch(s){return console.error("Ошибка при извлечении данных товара:",s),null}}}export{l as C,r as M,c as V};
|
||||
46
dist/assets/controller-BsNF2rMP.js
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
class h{constructor(){this.apiUrl="http://localhost:3000"}async request(t,e={}){const s=await fetch(`${this.apiUrl}${t}`,{...e,headers:{"Content-Type":"application/json",...e.headers}});if(!s.ok)throw new Error(`HTTP error! status: ${s.status}`);return await s.json()}async getLikesItems(){try{return await this.request("/likes")}catch(t){return console.error("Ошибка при получении избранного:",t),[]}}async addToLikes(t){try{if(!(await this.getLikesItems()).find(i=>i.id===t.id))return await(await fetch(`${this.apiUrl}/likes`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})).json()}catch(e){console.error("Ошибка при добавлении в избранное:",e)}}async removeFromLikes(t){try{await fetch(`${this.apiUrl}/likes/${t}`,{method:"DELETE"})}catch(e){console.error("Ошибка при удалении из избранного:",e)}}async moveToBasket(t){try{await(await fetch(`${this.apiUrl}/basket`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...t,quantity:1,addedAt:new Date().toISOString()})})).json(),await this.removeFromLikes(t.id)}catch(e){console.error("Ошибка при переносе товара в корзину:",e)}}}class m{constructor(){this.likesContainer=document.getElementById("likesContainer"),this.emptyLikesElement=document.querySelector(".empty-likes")}showLikes(t){if(!this.likesContainer)return;if(!t||t.length===0){this.showEmptyLikes();return}this.hideEmptyLikes();const e=t.map(s=>this.createLikesItemHTML(s)).join("");this.likesContainer.innerHTML=`
|
||||
<h2 class="mb-4 text-center">Избранное</h2>
|
||||
<div class="row g-3">${e}</div>
|
||||
`}createLikesItemHTML(t){return`
|
||||
<div class="col-md-4">
|
||||
<div class="card h-100 border-0 shadow like-item" data-id="${t.id}">
|
||||
<img src="${t.image}" class="card-img-top" alt="${t.name}">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">${t.name}</h5>
|
||||
<p class="card-text">${t.description}</p>
|
||||
|
||||
<!-- ✅ Добавляем Category и Condition -->
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h6 class="mb-1">Category:</h6>
|
||||
<p class="card-text">${t.category||"-"}</p>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<h6 class="mb-1">Condition:</h6>
|
||||
<p class="card-text">${t.condition||"-"}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="card-footer bg-transparent">
|
||||
<div class="d-flex justify-content-between align-items-end">
|
||||
<!-- Цена слева -->
|
||||
<span class="fw-bold text-muted fs-3 price-large">$${t.price}</span>
|
||||
|
||||
<!-- Кнопки справа -->
|
||||
<div class="d-flex flex-column gap-1">
|
||||
<button class="btn btn-sm btn-outline-primary move-to-basket-btn">
|
||||
<i class="bi bi-cart-plus"></i> В корзину
|
||||
</button>
|
||||
<button class="btn btn-sm btn-outline-danger remove-like-btn">
|
||||
<i class="bi bi-trash"></i> Удалить
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`}showEmptyLikes(){this.emptyLikesElement&&(this.emptyLikesElement.style.display="block"),this.likesContainer&&(this.likesContainer.innerHTML="")}hideEmptyLikes(){this.emptyLikesElement&&(this.emptyLikesElement.style.display="none")}showNotification(t,e="success"){const s=document.createElement("div");s.className=`alert alert-${e==="success"?"success":"danger"} alert-dismissible fade show`,s.style.cssText="position: fixed; top: 20px; right: 20px; z-index: 1050; min-width: 300px;",s.innerHTML=`
|
||||
${t}
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
|
||||
`,document.body.appendChild(s),setTimeout(()=>{s.parentNode&&s.remove()},3e3)}}class p{constructor(t,e){this.model=t,this.view=e,this.init()}async init(){window.location.pathname.includes("likes.html")&&(await this.loadLikes(),this.setupLikesEventListeners()),window.location.pathname.includes("catalog.html")&&this.setupCatalogEventListeners()}async loadLikes(){const t=await this.model.getLikesItems();this.view.showLikes(t)}setupLikesEventListeners(){document.addEventListener("click",async t=>{const e=t.target.closest(".like-item");if(!e)return;const s=e.dataset.id;if(t.target.closest(".remove-like-btn")&&(await this.model.removeFromLikes(s),this.view.showNotification("Товар удален из избранного"),await this.loadLikes()),t.target.closest(".move-to-basket-btn")){const o=(await this.model.getLikesItems()).find(a=>a.id===s);o&&(await this.model.moveToBasket(o),this.view.showNotification("Товар перенесен в корзину"),await this.loadLikes())}})}setupCatalogEventListeners(){document.addEventListener("click",async t=>{const e=t.target.closest(".card");if(e&&t.target.closest(".like-btn")){const s=this.extractProductData(e);s&&(await this.model.addToLikes(s),this.view.showNotification("Товар добавлен в избранное!"))}})}extractProductData(t){var e,s;try{const i=t.querySelector(".card-title").textContent,o=t.querySelector(".text-muted").textContent.replace("$",""),a=t.querySelector(".card-text").textContent,r=t.querySelector("img").src,c=((e=t.querySelector(".col-6:nth-child(1) p"))==null?void 0:e.textContent.trim())||"",l=((s=t.querySelector(".col-6:nth-child(2) p"))==null?void 0:s.textContent.trim())||"";return{id:btoa(`${i}-${o}`).substring(0,8),name:i.trim(),price:parseFloat(o),description:a.trim(),image:r,category:c,condition:l}}catch(i){return console.error("Ошибка при извлечении данных товара:",i),null}}}export{m as L,p as a,h as b};
|
||||
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
BIN
dist/assets/favicon-cXvr3Sfo.ico
vendored
Normal file
|
After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 1.5 MiB |
1
dist/assets/modulepreload-polyfill-B5Qt9EMX.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))i(e);new MutationObserver(e=>{for(const r of e)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function s(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?r.credentials="include":e.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(e){if(e.ep)return;e.ep=!0;const r=s(e);fetch(e.href,r)}})();
|
||||
|
Before Width: | Height: | Size: 260 KiB After Width: | Height: | Size: 260 KiB |
1
dist/assets/page2-Crmhwurg.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import"./modulepreload-polyfill-B5Qt9EMX.js";/* empty css */import{L as t,a as o,b as d}from"./controller-BsNF2rMP.js";import{V as i,C as s,M as r}from"./controller-BHzoImTo.js";document.addEventListener("DOMContentLoaded",function(){if(document.getElementById("productsContainer")){const e=new d,n=new t;new o(e,n)}});document.addEventListener("DOMContentLoaded",function(){if(document.getElementById("basketContainer")||document.getElementById("productsContainer")){const e=new r,n=new i;new s(e,n)}});
|
||||
1
dist/assets/page4-DyyBeFxE.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import"./modulepreload-polyfill-B5Qt9EMX.js";/* empty css */import{L as o,a as t,b as i}from"./controller-BsNF2rMP.js";document.addEventListener("DOMContentLoaded",function(){if(document.getElementById("likesContainer")){const e=new i,n=new o;new t(e,n)}});
|
||||
1
dist/assets/page5-SW2YIOd4.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import"./modulepreload-polyfill-B5Qt9EMX.js";/* empty css */import{V as n,C as o,M as d}from"./controller-BHzoImTo.js";document.addEventListener("DOMContentLoaded",function(){if(document.getElementById("basketContainer")||document.getElementById("productsContainer")){const e=new d,t=new n;new o(e,t)}});
|
||||
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 131 KiB |
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 313 KiB After Width: | Height: | Size: 313 KiB |
1
dist/assets/styles-cpwRBDRQ.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
body{background-color:#f8f9fa;color:#00264d}.bg-custom{background-color:#00264d!important}.btn-custom{background-color:#00264d;border-color:#00264d;color:#fff}.btn-custom:hover{background-color:#036;border-color:#036;color:#fff}.card{transition:transform .3s ease}.card:hover{transform:translateY(-5px);box-shadow:0 10px 20px #0000001a}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.navbar-brand img{border:2px solid rgba(255,255,255,.1)}.form-control:focus{border-color:#00264d;box-shadow:0 0 0 .25rem #00264d40}@media (max-width: 768px){.navbar-brand span{font-size:1rem}.display-4{font-size:2rem}}
|
||||
|
Before Width: | Height: | Size: 200 KiB After Width: | Height: | Size: 200 KiB |
|
Before Width: | Height: | Size: 205 KiB After Width: | Height: | Size: 205 KiB |
BIN
dist/assets/шмотки31-TxMfC034.jpg
vendored
Normal file
|
After Width: | Height: | Size: 276 KiB |
124
dist/basket.html
vendored
Normal file
@@ -0,0 +1,124 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>cyxaruk shop basket</title>
|
||||
<link rel="shortcut icon" href="/assets/favicon-cXvr3Sfo.ico" type="image/x-icon">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
|
||||
|
||||
|
||||
<style>
|
||||
@media (min-width: 992px) {
|
||||
.navbar .dropdown:hover .dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
.navbar .dropdown .dropdown-menu {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* прижимаем футер вниз */
|
||||
html, body {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
main {
|
||||
flex: 1; /* растягивается, чтобы футер был внизу */
|
||||
}
|
||||
</style>
|
||||
<script type="module" crossorigin src="/assets/page5-SW2YIOd4.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-B5Qt9EMX.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/controller-BHzoImTo.js">
|
||||
<link rel="stylesheet" crossorigin href="/assets/styles-cpwRBDRQ.css">
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-expand-lg navbar-dark" style="background-color: #00264d;">
|
||||
<div class="container">
|
||||
<a class="navbar-brand d-flex align-items-center" href="main.html">
|
||||
<img src="/assets/cyxaruk%20shop%20logo-DRloma41.jpg" alt="логотип" width="50" height="50" class="rounded-circle me-2">
|
||||
<span class="fw-bold">cyxaruk shop</span>
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="catalog.html" id="navbarDropdown" role="button"
|
||||
data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="bi bi-list-ul me-1"></i>Каталог
|
||||
</a>
|
||||
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-gender-male me-2"></i>Для мужчин</a></li>
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-gender-female me-2"></i>Для женщин</a></li>
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-globe me-2"></i>Заказ из-за границы</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="contacts.html"><i class="bi bi-telephone me-1"></i>Контакты</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="likes.html"><i class="bi bi-heart me-1"></i>Избранное</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="basket.html"><i class="bi bi-cart me-1"></i>Корзина</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="container my-4">
|
||||
<div class="empty-basket text-center py-5">
|
||||
<h1 class="mb-4">Здесь будут лежать твои товары</h1>
|
||||
<p class="lead mb-4">А пока здесь так пусто...</p>
|
||||
<img src="/assets/sad1-DBuXZxMU.jpg" alt="Пустая корзина" class="img-fluid rounded" style="max-height: 300px;">
|
||||
<div class="mt-4">
|
||||
<a href="catalog.html" class="btn btn-lg" style="background-color: #00264d; color: white;">
|
||||
<i class="bi bi-arrow-left me-2"></i>Вернуться в каталог
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="basketContainer"></div>
|
||||
</main>
|
||||
|
||||
<footer class="py-4 mt-5" style="background-color: #00264d; color: white;">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3 mb-md-0">
|
||||
<div class="d-flex align-items-center mb-3">
|
||||
<a href="https://t.me/cyxarukShop" class="text-white me-3">
|
||||
<i class="bi bi-telegram fs-2"></i>
|
||||
</a>
|
||||
<span>Подпишитесь на нас в Telegram</span>
|
||||
</div>
|
||||
<div class="d-flex align-items-center">
|
||||
<a href="https://www.avito.ru/..." class="text-white me-3">
|
||||
<i class="bi bi-shop-window fs-2"></i>
|
||||
</a>
|
||||
<span>Мы на Авито</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 text-md-end">
|
||||
<h5>Контакты</h5>
|
||||
<p><i class="bi bi-telephone me-2"></i>89876320523</p>
|
||||
<p><i class="bi bi-geo-alt me-2"></i>Ulyanovsk, Russia</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
|
||||
428
dist/catalog.html
vendored
Normal file
@@ -0,0 +1,428 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>cyxaruk shop catalog</title>
|
||||
<link rel="shortcut icon" href="/assets/favicon-cXvr3Sfo.ico" type="image/x-icon">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
|
||||
|
||||
<style>
|
||||
.like-btn.liked {
|
||||
color: #000000 !important;
|
||||
border-color: #dc3545 !important;
|
||||
}
|
||||
.like-btn.liked i {
|
||||
color: #dc3545 !important;
|
||||
}
|
||||
/* Черная оконтовка при наведении на нажатую кнопку */
|
||||
.like-btn.liked:hover i {
|
||||
text-shadow: 0 0 2px #000000,
|
||||
0 0 2px #000000,
|
||||
0 0 2px #000000;
|
||||
}
|
||||
/* Плавное изменение */
|
||||
.like-btn i {
|
||||
transition: text-shadow 0.2s ease;
|
||||
}
|
||||
</style>
|
||||
<script type="module" crossorigin src="/assets/page2-Crmhwurg.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-B5Qt9EMX.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/controller-BsNF2rMP.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/controller-BHzoImTo.js">
|
||||
<link rel="stylesheet" crossorigin href="/assets/styles-cpwRBDRQ.css">
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-expand-lg navbar-dark" style="background-color: #00264d;">
|
||||
<div class="container">
|
||||
<a class="navbar-brand d-flex align-items-center" href="main.html">
|
||||
<img src="/assets/cyxaruk%20shop%20logo-DRloma41.jpg" alt="логотип" width="50" height="50" class="rounded-circle me-2">
|
||||
<span class="fw-bold">cyxaruk shop</span>
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="catalog.html" id="navbarDropdown" role="button"
|
||||
data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="bi bi-list-ul me-1"></i>Каталог
|
||||
</a>
|
||||
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-gender-male me-2"></i>Для мужчин</a></li>
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-gender-female me-2"></i>Для женщин</a></li>
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-globe me-2"></i>Заказ из-за границы</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="contacts.html"><i class="bi bi-telephone me-1"></i>Контакты</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="likes.html"><i class="bi bi-heart me-1"></i>Избранное</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="basket.html"><i class="bi bi-cart me-1"></i>Корзина</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<style>
|
||||
@media (min-width: 992px) {
|
||||
.navbar .dropdown:hover .dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
.navbar .dropdown .dropdown-menu {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<main class="container my-4">
|
||||
<div class="accordion" id="accordionExample">
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header" id="headingOne">
|
||||
<button class="accordion-button" type="button" data-bs-toggle="collapse" style="background-color: #b0d8ff;" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
|
||||
Добавить товар
|
||||
</button>
|
||||
</h2>
|
||||
<div id="collapseOne" class="accordion-collapse collapse show" aria-labelledby="headingOne" data-bs-parent="#accordionExample">
|
||||
<div class="accordion-body">
|
||||
<div class="card mb-4 border-0 shadow">
|
||||
<div class="card-body">
|
||||
<form id="addProductForm" class="row g-3">
|
||||
<div class="col-md-6">
|
||||
<label for="productName" class="form-label">Название товара</label>
|
||||
<input type="text" class="form-control" id="productName" required>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="productPrice" class="form-label">Цена</label>
|
||||
<input type="text" class="form-control" id="productPrice" required>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="productCategory" class="form-label">Категория</label>
|
||||
<select class="form-select" id="productCategory" required>
|
||||
<option value="">Выберите категорию</option>
|
||||
<option value="1">Для мужчин</option>
|
||||
<option value="2">Для женщин</option>
|
||||
<option value="3">Унисекс</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<label for="productCondition" class="form-label">Состояние</label>
|
||||
<select class="form-select" id="productCondition" required>
|
||||
<option value="">Выберите состояние</option>
|
||||
<option value="1">Новый</option>
|
||||
<option value="2">Б/У</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<label for="productDescription" class="form-label">Описание</label>
|
||||
<textarea class="form-control" id="productDescription" rows="3" required></textarea>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<label for="productImage" class="form-label">Ссылка на изображение</label>
|
||||
<input type="text" class="form-control" id="productImage" required>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<button type="submit" class="btn" style="background-color: #00264d; color: white;">
|
||||
<i class="bi bi-check-circle me-2"></i>Добавить товар
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h1 class="text-center mb-4 mt-2">Каталог товаров</h1>
|
||||
<!-- Карточки товаров -->
|
||||
<div class="row row-cols-1 row-cols-md-2 row-cols-lg-3 g-4 mb-5" id="productsContainer">
|
||||
<!-- Карточка товара 1 -->
|
||||
<div class="col">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<img src="/assets/stonik-D_cwcHTM.jpg" class="card-img-top" alt="Stone Island">
|
||||
<div class="card-body">
|
||||
<h4 class="card-title">Stone Island</h4>
|
||||
<p class="card-text">super idol rovny pacan, groza rayona, mother's modnik, патч на месте</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Category:</h5>
|
||||
<p class="card-text">men</p>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Condition:</h5>
|
||||
<p class="card-text">new</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer bg-transparent">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<span class="text-muted">$1999.99</span>
|
||||
<button class="btn btn-sm" style="background-color: #00264d; color: white;">
|
||||
<i class="bi bi-cart-plus me-1"></i>В корзину
|
||||
</button>
|
||||
</div>
|
||||
<div class="mt-2 d-flex justify-content-between">
|
||||
<button class="btn btn-sm btn-outline-secondary like-btn">
|
||||
<i class="bi bi-heart"></i> В избранное
|
||||
</button>
|
||||
<button class="btn btn-sm btn-outline-secondary">
|
||||
<i class="bi bi-share"></i> Поделиться
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Карточка товара 2 -->
|
||||
<div class="col">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<img src="/assets/adidas-gadQV-Lz.jpg" class="card-img-top" alt="Adidas">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Adidas</h5>
|
||||
<p class="card-text">sportik, street, baskemtball, air, old school</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Category:</h5>
|
||||
<p class="card-text">men</p>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Condition:</h5>
|
||||
<p class="card-text">wu</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer bg-transparent">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<span class="text-muted">$19.99</span>
|
||||
<button class="btn btn-sm" style="background-color: #00264d; color: white;">
|
||||
<i class="bi bi-cart-plus me-1"></i>В корзину
|
||||
</button>
|
||||
</div>
|
||||
<div class="mt-2 d-flex justify-content-between">
|
||||
<button class="btn btn-sm btn-outline-secondary like-btn">
|
||||
<i class="bi bi-heart"></i> В избранное
|
||||
</button>
|
||||
<button class="btn btn-sm btn-outline-secondary">
|
||||
<i class="bi bi-share"></i> Поделиться
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Карточка товара 3 -->
|
||||
<div class="col">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<img src="/assets/napapisaj-DNuXYAGR.jpg" class="card-img-top" alt="Napapisaj">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Napapisaj</h5>
|
||||
<p class="card-text">super idol rovny pacan, groza rayona, mother's modnik, +rep from brothers</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Category:</h5>
|
||||
<p class="card-text">men</p>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Condition:</h5>
|
||||
<p class="card-text">wu</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer bg-transparent">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<span class="text-muted">$1499.99</span>
|
||||
<button class="btn btn-sm" style="background-color: #00264d; color: white;">
|
||||
<i class="bi bi-cart-plus me-1"></i>В корзину
|
||||
</button>
|
||||
</div>
|
||||
<div class="mt-2 d-flex justify-content-between">
|
||||
<button class="btn btn-sm btn-outline-secondary like-btn">
|
||||
<i class="bi bi-heart"></i> В избранное
|
||||
</button>
|
||||
<button class="btn btn-sm btn-outline-secondary">
|
||||
<i class="bi bi-share"></i> Поделиться
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Карточка товара 4 -->
|
||||
<div class="col">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<img src="/assets/lacoste-BSTUvTkt.png" class="card-img-top" alt="Lacoste">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Lacoste</h5>
|
||||
<p class="card-text">style, nice, mother's modnik, cotton, krokodil</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Category:</h5>
|
||||
<p class="card-text">uni</p>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Condition:</h5>
|
||||
<p class="card-text">wu</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer bg-transparent">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<span class="text-muted">$399.99</span>
|
||||
<button class="btn btn-sm" style="background-color: #00264d; color: white;">
|
||||
<i class="bi bi-cart-plus me-1"></i>В корзину
|
||||
</button>
|
||||
</div>
|
||||
<div class="mt-2 d-flex justify-content-between">
|
||||
<button class="btn btn-sm btn-outline-secondary like-btn">
|
||||
<i class="bi bi-heart"></i> В избранное
|
||||
</button>
|
||||
<button class="btn btn-sm btn-outline-secondary">
|
||||
<i class="bi bi-share"></i> Поделиться
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Карточка товара 5 -->
|
||||
<div class="col">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<img src="/assets/samba-C8wu5LAG.png" class="card-img-top" alt="Samba">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Samba</h5>
|
||||
<p class="card-text">super idol rovny pacan, groza rayona, mother's modnik, +rep from brothers</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Category:</h5>
|
||||
<p class="card-text">women</p>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Condition:</h5>
|
||||
<p class="card-text">new</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer bg-transparent">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<span class="text-muted">$449.99</span>
|
||||
<button class="btn btn-sm" style="background-color: #00264d; color: white;">
|
||||
<i class="bi bi-cart-plus me-1"></i>В корзину
|
||||
</button>
|
||||
</div>
|
||||
<div class="mt-2 d-flex justify-content-between">
|
||||
<button class="btn btn-sm btn-outline-secondary like-btn">
|
||||
<i class="bi bi-heart"></i> В избранное
|
||||
</button>
|
||||
<button class="btn btn-sm btn-outline-secondary">
|
||||
<i class="bi bi-share"></i> Поделиться
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="py-4 mt-5" style="background-color: #00264d; color: white;">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3 mb-md-0">
|
||||
<div class="d-flex align-items-center mb-3">
|
||||
<a href="https://t.me/cyxarukShop" class="text-white me-3">
|
||||
<i class="bi bi-telegram fs-2"></i>
|
||||
</a>
|
||||
<span>Подпишитесь на нас в Telegram</span>
|
||||
</div>
|
||||
<div class="d-flex align-items-center">
|
||||
<a href="https://www.avito.ru/..." class="text-white me-3">
|
||||
<i class="bi bi-shop-window fs-2"></i>
|
||||
</a>
|
||||
<span>Мы на Авито</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 text-md-end">
|
||||
<h5>Контакты</h5>
|
||||
<p><i class="bi bi-telephone me-2"></i>89876320523</p>
|
||||
<p><i class="bi bi-geo-alt me-2"></i>Ulyanovsk, Russia</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
<script>
|
||||
document.getElementById("addProductForm").addEventListener("submit", function (e) {
|
||||
e.preventDefault();
|
||||
const name = document.getElementById("productName").value;
|
||||
const price = document.getElementById("productPrice").value;
|
||||
const category = document.getElementById("productCategory").value;
|
||||
const condition = document.getElementById("productCondition").value;
|
||||
const description = document.getElementById("productDescription").value;
|
||||
const image = document.getElementById("productImage").value;
|
||||
|
||||
// Получаем текстовые значения для отображения
|
||||
const categoryText = document.getElementById("productCategory").options[document.getElementById("productCategory").selectedIndex].text;
|
||||
const conditionText = document.getElementById("productCondition").options[document.getElementById("productCondition").selectedIndex].text;
|
||||
|
||||
const productCard = `
|
||||
<div class="col">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<img src="${image}" class="card-img-top" alt="${name}">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">${name}</h5>
|
||||
<p class="card-text">${description}</p>
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Category:</h5>
|
||||
<p class="card-text">${categoryText}</p>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<h5 class="card-text mb-1">Condition:</h5>
|
||||
<p class="card-text">${conditionText}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer bg-transparent">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<span class="text-muted">${price}</span>
|
||||
<button class="btn btn-sm" style="background-color: #00264d; color: white;">
|
||||
<i class="bi bi-cart-plus me-1"></i>В корзину
|
||||
</button>
|
||||
</div>
|
||||
<div class="mt-2 d-flex justify-content-between">
|
||||
<button class="btn btn-sm btn-outline-secondary like-btn">
|
||||
<i class="bi bi-heart"></i> В избранное
|
||||
</button>
|
||||
<button class="btn btn-sm btn-outline-secondary">
|
||||
<i class="bi bi-share"></i> Поделиться
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
document.getElementById("productsContainer").insertAdjacentHTML("beforeend", productCard);
|
||||
this.reset();
|
||||
});
|
||||
</script>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
162
dist/contacts.html
vendored
Normal file
@@ -0,0 +1,162 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>cyxaruk shop contacts</title>
|
||||
<link rel="shortcut icon" href="/assets/favicon-cXvr3Sfo.ico" type="image/x-icon">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
|
||||
<link rel="stylesheet" href="css/styles.css" />
|
||||
<style>
|
||||
html, body {
|
||||
height: 100%;
|
||||
}
|
||||
body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
color: #00264d;
|
||||
}
|
||||
main {
|
||||
flex: 1 0 auto;
|
||||
}
|
||||
footer {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.table-custom {
|
||||
background-color: #00264d;
|
||||
color: white;
|
||||
}
|
||||
.table-custom thead th {
|
||||
background-color: #001a3a;
|
||||
color: white;
|
||||
}
|
||||
.table-custom tbody tr:hover {
|
||||
background-color: #003366;
|
||||
color: white;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-expand-lg navbar-dark" style="background-color: #00264d;">
|
||||
<div class="container">
|
||||
<a class="navbar-brand d-flex align-items-center" href="main.html">
|
||||
<img src="/assets/cyxaruk%20shop%20logo-DRloma41.jpg" alt="логотип" width="50" height="50" class="rounded-circle me-2">
|
||||
<span class="fw-bold">cyxaruk shop</span>
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="catalog.html" id="navbarDropdown" role="button"
|
||||
data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="bi bi-list-ul me-1"></i>Каталог
|
||||
</a>
|
||||
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-gender-male me-2"></i>Для мужчин</a></li>
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-gender-female me-2"></i>Для женщин</a></li>
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-globe me-2"></i>Заказ из-за границы</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="contacts.html"><i class="bi bi-telephone me-1"></i>Контакты</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="likes.html"><i class="bi bi-heart me-1"></i>Избранное</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="basket.html"><i class="bi bi-cart me-1"></i>Корзина</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<style>
|
||||
@media (min-width: 992px) {
|
||||
.navbar .dropdown:hover .dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
.navbar .dropdown .dropdown-menu {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<main class="container my-4">
|
||||
<h1 class="text-center mb-4">Контакты</h1>
|
||||
|
||||
<div class="card border-0 shadow-sm mb-4">
|
||||
<div class="card-header" style="background-color: #00264d; color: white;">
|
||||
<h5 class="mb-0"><i class="bi bi-info-circle me-2"></i>Контактная информация</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-custom table-striped table-hover">
|
||||
<caption class="text-dark">Контакты (звонить только в поддержку)</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ФИО</th>
|
||||
<th>Должность</th>
|
||||
<th>Телефон</th>
|
||||
<th>Телеграм</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Платонов Артемий Михайлович</td>
|
||||
<td>Администрация / продавец</td>
|
||||
<td>89876320523</td>
|
||||
<td>@RBCScyxaruk</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ауц Евгений Валерьевич</td>
|
||||
<td>Продавец / поддержка круглосуточная</td>
|
||||
<td>89021263060</td>
|
||||
<td>@yevgenauts</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Данилюк Анжела</td>
|
||||
<td>Продавец / консультант</td>
|
||||
<td>89176235020</td>
|
||||
<td>@bomzhela</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="py-4" style="background-color: #00264d; color: white;">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3 mb-md-0">
|
||||
<div class="d-flex align-items-center mb-3">
|
||||
<a href="https://t.me/cyxarukShop" class="text-white me-3">
|
||||
<i class="bi bi-telegram fs-2"></i>
|
||||
</a>
|
||||
<span>Подпишитесь на нас в Telegram</span>
|
||||
</div>
|
||||
<div class="d-flex align-items-center">
|
||||
<a href="https://www.avito.ru/..." class="text-white me-3">
|
||||
<i class="bi bi-shop-window fs-2"></i>
|
||||
</a>
|
||||
<span>Мы на Авито</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 text-md-end">
|
||||
<h5>Контакты</h5>
|
||||
<p><i class="bi bi-telephone me-2"></i>89876320523</p>
|
||||
<p><i class="bi bi-geo-alt me-2"></i>Ulyanovsk, Russia</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
108
dist/likes.html
vendored
Normal file
@@ -0,0 +1,108 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>cyxaruk shop basket</title>
|
||||
<link rel="shortcut icon" href="/assets/favicon-cXvr3Sfo.ico" type="image/x-icon">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
|
||||
|
||||
<script type="module" crossorigin src="/assets/page4-DyyBeFxE.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-B5Qt9EMX.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/controller-BsNF2rMP.js">
|
||||
<link rel="stylesheet" crossorigin href="/assets/styles-cpwRBDRQ.css">
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-expand-lg navbar-dark" style="background-color: #00264d;">
|
||||
<div class="container">
|
||||
<a class="navbar-brand d-flex align-items-center" href="main.html">
|
||||
<img src="/assets/cyxaruk%20shop%20logo-DRloma41.jpg" alt="логотип" width="50" height="50" class="rounded-circle me-2">
|
||||
<span class="fw-bold">cyxaruk shop</span>
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="catalog.html" id="navbarDropdown" role="button"
|
||||
data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="bi bi-list-ul me-1"></i>Каталог
|
||||
</a>
|
||||
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-gender-male me-2"></i>Для мужчин</a></li>
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-gender-female me-2"></i>Для женщин</a></li>
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-globe me-2"></i>Заказ из-за границы</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="contacts.html"><i class="bi bi-telephone me-1"></i>Контакты</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="likes.html"><i class="bi bi-heart me-1"></i>Избранное</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="basket.html"><i class="bi bi-cart me-1"></i>Корзина</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<style>
|
||||
@media (min-width: 992px) {
|
||||
.navbar .dropdown:hover .dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
.navbar .dropdown .dropdown-menu {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<main class="container my-4">
|
||||
<div class="text-center py-5 empty-likes">
|
||||
<h1 class="mb-4">Здесь будут лежать товары, которые тебе понравились</h1>
|
||||
<p class="lead mb-4">А пока здесь так пусто...</p>
|
||||
<img src="/assets/sad2-GwJVM7cz.jpeg" alt="Пусто" class="img-fluid rounded" style="max-height: 300px;">
|
||||
<div class="mt-4">
|
||||
<a href="catalog.html" class="btn btn-lg" style="background-color: #00264d; color: white;">
|
||||
<i class="bi bi-arrow-left me-2"></i>Вернуться в каталог
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="likesContainer"></div>
|
||||
</main>
|
||||
|
||||
<footer class="py-4 mt-5" style="background-color: #00264d; color: white;">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3 mb-md-0">
|
||||
<div class="d-flex align-items-center mb-3">
|
||||
<a href="https://t.me/cyxarukShop" class="text-white me-3">
|
||||
<i class="bi bi-telegram fs-2"></i>
|
||||
</a>
|
||||
<span>Подпишитесь на нас в Telegram</span>
|
||||
</div>
|
||||
<div class="d-flex align-items-center">
|
||||
<a href="https://www.avito.ru/..." class="text-white me-3">
|
||||
<i class="bi bi-shop-window fs-2"></i>
|
||||
</a>
|
||||
<span>Мы на Авито</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 text-md-end">
|
||||
<h5>Контакты</h5>
|
||||
<p><i class="bi bi-telephone me-2"></i>89876320523</p>
|
||||
<p><i class="bi bi-geo-alt me-2"></i>Ulyanovsk, Russia</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
|
||||
174
dist/main.html
vendored
Normal file
@@ -0,0 +1,174 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>cyxaruk shop</title>
|
||||
<link rel="shortcut icon" href="/assets/favicon-cXvr3Sfo.ico" type="image/x-icon">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
|
||||
|
||||
<style>
|
||||
body {
|
||||
color: #00264d;
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" crossorigin href="/assets/styles-cpwRBDRQ.css">
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-expand-lg navbar-dark" style="background-color: #00264d;">
|
||||
<div class="container">
|
||||
<a class="navbar-brand d-flex align-items-center" href="main.html">
|
||||
<img src="/assets/cyxaruk%20shop%20logo-DRloma41.jpg" alt="логотип" width="50" height="50" class="rounded-circle me-2">
|
||||
<span class="fw-bold">cyxaruk shop</span>
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="catalog.html" id="navbarDropdown" role="button"
|
||||
data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="bi bi-list-ul me-1"></i>Каталог
|
||||
</a>
|
||||
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-gender-male me-2"></i>Для мужчин</a></li>
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-gender-female me-2"></i>Для женщин</a></li>
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-globe me-2"></i>Заказ из-за границы</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="contacts.html"><i class="bi bi-telephone me-1"></i>Контакты</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="likes.html"><i class="bi bi-heart me-1"></i>Избранное</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="basket.html"><i class="bi bi-cart me-1"></i>Корзина</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<style>
|
||||
@media (min-width: 992px) {
|
||||
.navbar .dropdown:hover .dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
.navbar .dropdown .dropdown-menu {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<main class="container my-4">
|
||||
<div class="row align-items-center mb-5">
|
||||
<div class="col-md-6 mb-4 mb-md-0">
|
||||
<img src="/assets/%D1%88%D0%BC%D0%BE%D1%82%D0%BA%D0%B82-CnCqIiH2.jpg" alt="Промо" class="img-fluid rounded shadow">
|
||||
</div>
|
||||
<div class="col-md-6 text-center text-md-end d-flex flex-column align-items-md-center">
|
||||
<h2 class="fw-bold mb-3"><em>Official cyxaruk shop website</em></h2>
|
||||
<a href="catalog.html" class="btn btn-lg" style="background-color: #00264d; color: white;">
|
||||
<i class="bi bi-bag me-2"></i>Начать покупки
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-center mb-5">
|
||||
<h1 class="fw-bold">ONLY THE FATTEST STUFF</h1>
|
||||
</div>
|
||||
|
||||
<div class="row g-4 mb-5">
|
||||
<div class="col-md-6">
|
||||
<img src="/assets/%D1%88%D0%BC%D0%BE%D1%82%D0%BA%D0%B8-mMMCdlPj.jpg" alt="Товары 1" class="img-fluid rounded shadow">
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<img src="/assets/%D1%88%D0%BC%D0%BE%D1%82%D0%BA%D0%B831-TxMfC034.jpg" alt="Товары 2" class="img-fluid rounded shadow">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2 class="text-center mb-4"><em>Отзывы</em></h2>
|
||||
<div class="row g-4">
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<div class="card-body text-center">
|
||||
<img src="/assets/ava-DiHUHyvl.jpg" class="mx-auto mb-3 rounded-circle" style="width: 60px; height: 60px; object-fit: cover;" alt="AUC EVGEN">
|
||||
<h5 class="card-title">AUC EVGEN</h5>
|
||||
<p class="card-text">Сотрудничаем уже 7 лет, все четко</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<div class="card-body text-center">
|
||||
<img src="/assets/ava-DiHUHyvl.jpg" class="mx-auto mb-3 rounded-circle" style="width: 60px; height: 60px; object-fit: cover;" alt="Vupava Kitalya">
|
||||
<h5 class="card-title">Vupava Kitalya</h5>
|
||||
<p class="card-text">Просил найти его бренд Napapisaj, очень редкая штука, но он справился, 10/10</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<div class="card-body text-center">
|
||||
<img src="/assets/ava-DiHUHyvl.jpg" class="mx-auto mb-3 rounded-circle" style="width: 60px; height: 60px; object-fit: cover;" alt="Hater228">
|
||||
<h5 class="card-title">Hater228</h5>
|
||||
<p class="card-text">Как от ****** отойдешь, цену поменяй, клоун</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<div class="card-body text-center">
|
||||
<img src="/assets/ava-DiHUHyvl.jpg" class="mx-auto mb-3 rounded-circle" style="width: 60px; height: 60px; object-fit: cover;" alt="Anjela Danil">
|
||||
<h5 class="card-title">Anjela Danil</h5>
|
||||
<p class="card-text">Норм продавец, 9/10, пук пук</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<div class="card-body text-center">
|
||||
<img src="/assets/ava-DiHUHyvl.jpg" class="mx-auto mb-3 rounded-circle" style="width: 60px; height: 60px; object-fit: cover;" alt="Bima Daryshev">
|
||||
<h5 class="card-title">Bima Daryshev</h5>
|
||||
<p class="card-text">При покупке не возникло никаких проблем, предоставляет огромное кол-во скидок</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="py-4 mt-5" style="background-color: #00264d; color: white;">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3 mb-md-0">
|
||||
<div class="d-flex align-items-center mb-3">
|
||||
<a href="https://t.me/cyxarukShop" class="text-white me-3">
|
||||
<i class="bi bi-telegram fs-2"></i>
|
||||
</a>
|
||||
<span>Подпишитесь на нас в Telegram</span>
|
||||
</div>
|
||||
<div class="d-flex align-items-center">
|
||||
<a href="https://www.avito.ru/..." class="text-white me-3">
|
||||
<i class="bi bi-shop-window fs-2"></i>
|
||||
</a>
|
||||
<span>Мы на Авито</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 text-md-end">
|
||||
<h5>Контакты</h5>
|
||||
<p><i class="bi bi-telephone me-2"></i>89876320523</p>
|
||||
<p><i class="bi bi-geo-alt me-2"></i>Ulyanovsk, Russia</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
</body>
|
||||
BIN
img/adidas.jpg
Normal file
|
After Width: | Height: | Size: 219 KiB |
BIN
img/ava.jpg
Normal file
|
After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
BIN
img/cyxaruk shop logo.jpg
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
img/favicon.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
img/lacoste.png
Normal file
|
After Width: | Height: | Size: 1.5 MiB |
BIN
img/napapisaj.jpg
Normal file
|
After Width: | Height: | Size: 260 KiB |
BIN
img/sad1.jpg
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
img/sad2.jpeg
Normal file
|
After Width: | Height: | Size: 131 KiB |
BIN
img/samba.png
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
img/stonik.jpg
Normal file
|
After Width: | Height: | Size: 313 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
BIN
img/шмотки.jpg
Normal file
|
After Width: | Height: | Size: 200 KiB |
BIN
img/шмотки2.jpg
Normal file
|
After Width: | Height: | Size: 205 KiB |
|
Before Width: | Height: | Size: 149 KiB After Width: | Height: | Size: 149 KiB |
BIN
img/шмотки31.jpg
Normal file
|
After Width: | Height: | Size: 276 KiB |
151
likes.css
@@ -1,151 +0,0 @@
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
height: 1200px;
|
||||
font-size: 18px;
|
||||
font-family: sans-serif;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
a:link,
|
||||
a:visited {
|
||||
color: #dbe2ef;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.header {
|
||||
position: fixed;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
height: 90px;
|
||||
background: #112d4e;
|
||||
padding: 0;
|
||||
color: #dbe2ef;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.logo-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.logo img {
|
||||
width: 75px;
|
||||
height: 75px;
|
||||
border-radius: 15px;
|
||||
margin-left: 10px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
margin: 0 20px;
|
||||
font-size: 1.5em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.menu {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
list-style-type: none;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.menu > li {
|
||||
margin-right: 30px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.menu > li:last-of-type {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.dropdown {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.dropdown > a {
|
||||
cursor: pointer;
|
||||
color: #dbe2ef;
|
||||
}
|
||||
|
||||
.dropdown:hover .features-menu {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.features-menu {
|
||||
display: none;
|
||||
flex-direction: column;
|
||||
background: #b2d6ff;
|
||||
border-radius: 5px;
|
||||
padding-top: 10px;
|
||||
position: absolute;
|
||||
top: 40px;
|
||||
left: 0;
|
||||
z-index: 1;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.features-menu li {
|
||||
border-bottom: 1px solid #fff;
|
||||
font-size: 0.8em;
|
||||
width: 100%;
|
||||
padding: 10px 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.features-menu li:last-of-type {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.features-menu a {
|
||||
color: #112d4e;
|
||||
}
|
||||
|
||||
.sad{
|
||||
padding-top: 150px;
|
||||
color: #00264d;
|
||||
text-align: center;
|
||||
padding-bottom: 100px;
|
||||
}
|
||||
|
||||
.footer {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 20px;
|
||||
background-color: #00264d;
|
||||
color: #b2d6ff;
|
||||
}
|
||||
|
||||
.social-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.social {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.social h2, .social h1 {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.contact-info {
|
||||
text-align: right;
|
||||
}
|
||||
154
likes.html
@@ -2,57 +2,117 @@
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>cyxaruk shop catalog</title>
|
||||
<link rel="stylesheet" href="basket.css" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>cyxaruk shop basket</title>
|
||||
<link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
|
||||
<link rel="stylesheet" href="./styles.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<a href="main.html" class="logo">
|
||||
<img src="фотки/cyxaruk shop logo.jpg" alt="сухарик шоп">
|
||||
</a>
|
||||
<h1>cyxaruk shop</h1>
|
||||
<ul class="menu">
|
||||
<li class="dropdown">
|
||||
<a href="catalog.html">Catalog ▾</a>
|
||||
<ul class="features-menu">
|
||||
<li><a href="#">For Men</a></li>
|
||||
<li><a href="#">For Women</a></li>
|
||||
<li><a href="#">For Kids</a></li>
|
||||
<li><a href="#">Order from abroad</a></li>
|
||||
<nav class="navbar navbar-expand-lg navbar-dark" style="background-color: #00264d;">
|
||||
<div class="container">
|
||||
<a class="navbar-brand d-flex align-items-center" href="main.html">
|
||||
<img src="img/cyxaruk shop logo.jpg" alt="логотип" width="50" height="50" class="rounded-circle me-2">
|
||||
<span class="fw-bold">cyxaruk shop</span>
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="catalog.html" id="navbarDropdown" role="button"
|
||||
data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="bi bi-list-ul me-1"></i>Каталог
|
||||
</a>
|
||||
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-gender-male me-2"></i>Для мужчин</a></li>
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-gender-female me-2"></i>Для женщин</a></li>
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-globe me-2"></i>Заказ из-за границы</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="contacts.html"><i class="bi bi-telephone me-1"></i>Контакты</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="likes.html"><i class="bi bi-heart me-1"></i>Избранное</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="basket.html"><i class="bi bi-cart me-1"></i>Корзина</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="contacts.html">Contacts</a></li>
|
||||
<li><a href="user.html">User</a></li>
|
||||
<li><a href="basket.html">
|
||||
<img src="фотки/basket.png" width="50" height="50" alt="корзина">
|
||||
</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="sad">
|
||||
<h1>Здесь будут лежать товары, которые тебе понравились, <br/> а пока здесь так пусто...</h1>
|
||||
<img src="фотки/sad2.jpeg" width="500" height="300">
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<div class="social-container">
|
||||
<div class="social">
|
||||
<a href="https://t.me/cyxarukShop">
|
||||
<img src="фотки/telega.png" width="100" height="100" alt="Telegram">
|
||||
</a>
|
||||
<h2>← also follow us on tg</h2>
|
||||
</div>
|
||||
<div class="social">
|
||||
<a href="https://www.avito.ru/brands/6f43f8798e9eb61c3350f391762e98b3/all/odezhda_obuv_aksessuary?gdlkerfdnwq=101&page_from=from_item_card&iid=3935618105&sellerId=81d843720716be16ce230bba484bce75">
|
||||
<img src="фотки/avito.png" width="80" height="80" alt="Avito">
|
||||
</a>
|
||||
<h1>← and avito</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="contact-info">
|
||||
<h2>89876320523</h2>
|
||||
<h2>Ulyanovsk, Russia</h2>
|
||||
</nav>
|
||||
|
||||
<style>
|
||||
@media (min-width: 992px) {
|
||||
.navbar .dropdown:hover .dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
.navbar .dropdown .dropdown-menu {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<main class="container my-4">
|
||||
<div class="text-center py-5 empty-likes">
|
||||
<h1 class="mb-4">Здесь будут лежать товары, которые тебе понравились</h1>
|
||||
<p class="lead mb-4">А пока здесь так пусто...</p>
|
||||
<img src="img/sad2.jpeg" alt="Пусто" class="img-fluid rounded" style="max-height: 300px;">
|
||||
<div class="mt-4">
|
||||
<a href="catalog.html" class="btn btn-lg" style="background-color: #00264d; color: white;">
|
||||
<i class="bi bi-arrow-left me-2"></i>Вернуться в каталог
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="likesContainer"></div>
|
||||
</main>
|
||||
|
||||
<footer class="py-4 mt-5" style="background-color: #00264d; color: white;">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3 mb-md-0">
|
||||
<div class="d-flex align-items-center mb-3">
|
||||
<a href="https://t.me/cyxarukShop" class="text-white me-3">
|
||||
<i class="bi bi-telegram fs-2"></i>
|
||||
</a>
|
||||
<span>Подпишитесь на нас в Telegram</span>
|
||||
</div>
|
||||
<div class="d-flex align-items-center">
|
||||
<a href="https://www.avito.ru/..." class="text-white me-3">
|
||||
<i class="bi bi-shop-window fs-2"></i>
|
||||
</a>
|
||||
<span>Мы на Авито</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 text-md-end">
|
||||
<h5>Контакты</h5>
|
||||
<p><i class="bi bi-telephone me-2"></i>89876320523</p>
|
||||
<p><i class="bi bi-geo-alt me-2"></i>Ulyanovsk, Russia</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
<script type="module">
|
||||
import { LikesModel } from '/components/likes/model.js';
|
||||
import { LikesView } from '/components/likes/view.js';
|
||||
import { LikesController } from '/components/likes/controller.js';
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
if (document.getElementById('likesContainer')) {
|
||||
const model = new LikesModel();
|
||||
const view = new LikesView();
|
||||
new LikesController(model, view);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
245
main.css
@@ -1,245 +0,0 @@
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
height: 1200px;
|
||||
font-size: 18px;
|
||||
font-family: sans-serif;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
|
||||
a:link,
|
||||
a:visited {
|
||||
color: #dbe2ef;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.header {
|
||||
position: fixed;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
height: 90px;
|
||||
background: #112d4e;
|
||||
padding: 0;
|
||||
color: #dbe2ef;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.logo-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.logo img {
|
||||
width: 75px;
|
||||
height: 75px;
|
||||
border-radius: 15px;
|
||||
margin-left: 10px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
margin: 0 20px;
|
||||
font-size: 1.5em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.menu {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
list-style-type: none;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.menu > li {
|
||||
margin-right: 30px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.menu > li:last-of-type {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.dropdown {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.dropdown > a {
|
||||
cursor: pointer;
|
||||
color: #dbe2ef;
|
||||
}
|
||||
|
||||
.dropdown:hover .features-menu {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.features-menu {
|
||||
display: none;
|
||||
flex-direction: column;
|
||||
background: #b2d6ff;
|
||||
border-radius: 5px;
|
||||
padding-top: 10px;
|
||||
position: absolute;
|
||||
top: 40px;
|
||||
left: 0;
|
||||
z-index: 1;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.features-menu li {
|
||||
border-bottom: 1px solid #fff;
|
||||
font-size: 0.8em;
|
||||
width: 100%;
|
||||
padding: 10px 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.features-menu li:last-of-type {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.features-menu a {
|
||||
color: #112d4e;
|
||||
}
|
||||
|
||||
.promo-section {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 20px;
|
||||
background-color: #f9f9f9;
|
||||
border: 1px solid #ddd;
|
||||
margin: 90px 20px 20px;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.image-container {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.image-container img {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.text-container {
|
||||
flex: 1;
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
color: #00264d;
|
||||
}
|
||||
|
||||
.text-container h2 {
|
||||
font-size: 4em;
|
||||
color: #003366;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.button {
|
||||
display: inline-block;
|
||||
padding: 10px 20px;
|
||||
background-color: #003366;
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
border-radius: 4px;
|
||||
font-size: 1em;
|
||||
transition: background-color 0.3s ease;
|
||||
}
|
||||
|
||||
.button:hover {
|
||||
background-color: #00264d;
|
||||
}
|
||||
|
||||
.page {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
padding-bottom: 50px;
|
||||
}
|
||||
|
||||
.section {
|
||||
width: 736px;
|
||||
height: 500px;
|
||||
display:flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.feedback {
|
||||
overflow: hidden;
|
||||
color: #00264d;
|
||||
padding-bottom: 50px;
|
||||
}
|
||||
|
||||
.feedback h1{
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.column {
|
||||
float: left;
|
||||
width: 31%;
|
||||
margin: 20px 1.15%;
|
||||
height: 160px;
|
||||
background-color: #b2d6ff;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.avatar {
|
||||
float: left;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
margin: 25px;
|
||||
border-radius: 40px;
|
||||
background-color: #d6e9fe;
|
||||
}
|
||||
|
||||
.username {
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
.comment {
|
||||
margin: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.footer {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 20px;
|
||||
background-color: #00264d;
|
||||
color: #b2d6ff;
|
||||
}
|
||||
|
||||
.social-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.social {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.social h2, .social h1 {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.contact-info {
|
||||
text-align: right;
|
||||
}
|
||||
270
main.html
@@ -2,121 +2,173 @@
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>cyxaruk shop</title>
|
||||
<link rel="stylesheet" href="main.css" />
|
||||
<link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
|
||||
<link rel="stylesheet" href="./styles.css" />
|
||||
<style>
|
||||
body {
|
||||
color: #00264d;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<a href="main.html" class="logo">
|
||||
<img src="фотки/cyxaruk shop logo.jpg" alt="сухарик шоп">
|
||||
</a>
|
||||
<h1>cyxaruk shop</h1>
|
||||
<ul class="menu">
|
||||
<li class="dropdown">
|
||||
<a href="catalog.html">Catalog ▾</a>
|
||||
<ul class="features-menu">
|
||||
<li><a href="#">For Men</a></li>
|
||||
<li><a href="#">For Women</a></li>
|
||||
<li><a href="#">For Kids</a></li>
|
||||
<li><a href="#">Order from abroad</a></li>
|
||||
<nav class="navbar navbar-expand-lg navbar-dark" style="background-color: #00264d;">
|
||||
<div class="container">
|
||||
<a class="navbar-brand d-flex align-items-center" href="main.html">
|
||||
<img src="img/cyxaruk shop logo.jpg" alt="логотип" width="50" height="50" class="rounded-circle me-2">
|
||||
<span class="fw-bold">cyxaruk shop</span>
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="catalog.html" id="navbarDropdown" role="button"
|
||||
data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="bi bi-list-ul me-1"></i>Каталог
|
||||
</a>
|
||||
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-gender-male me-2"></i>Для мужчин</a></li>
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-gender-female me-2"></i>Для женщин</a></li>
|
||||
<li><hr class="dropdown-divider"></li>
|
||||
<li><a class="dropdown-item" href="catalog.html"><i class="bi bi-globe me-2"></i>Заказ из-за границы</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="contacts.html"><i class="bi bi-telephone me-1"></i>Контакты</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="likes.html"><i class="bi bi-heart me-1"></i>Избранное</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="basket.html"><i class="bi bi-cart me-1"></i>Корзина</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="contacts.html">Contacts</a></li>
|
||||
<li><a href="likes.html">Likes</a></li>
|
||||
<li><a href="basket.html">
|
||||
<img src="фотки/basket.png" width="50" height="50" alt="корзина">
|
||||
</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="promo-section">
|
||||
<div class="image-container">
|
||||
<img src="фотки/шмотки2.jpg" alt="Шмотки">
|
||||
</div>
|
||||
<div class="text-container">
|
||||
<h2> <em>Official cyxaruk shop website</em> </h2>
|
||||
<a href="catalog.html" class="button"> Go shopping </a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-container">
|
||||
<h1>ONLY THE FATTEST STUFF</h1>
|
||||
</div>
|
||||
|
||||
<div class="page">
|
||||
<div class="section">
|
||||
<img src="фотки/шмотки.jpg" width="736" height="500">
|
||||
</div>
|
||||
<div class="section">
|
||||
<img src="фотки/шмотки3.jpg" width="735" height="500">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="feedback">
|
||||
<h1><em>Отзывы</em></h1>
|
||||
<div class="column">
|
||||
<div class="avatar"></div>
|
||||
<h3 class="username">Pistoletov Sasha</h3>
|
||||
<p class="comment">
|
||||
стон 1200 рублей и расход, го можно пж?
|
||||
</p>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="avatar"></div>
|
||||
<h3 class="username">AUC EVGEN</h3>
|
||||
<p class="comment">
|
||||
Сотрудничаем уже 7 лет, мужик хороший, надежный, цена для размещения вещей адекватная, все четко
|
||||
</p>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="avatar"></div>
|
||||
<h3 class="username">Vupava Kitalya</h3>
|
||||
<p class="comment">
|
||||
Продавец ответственно подходит к своему делу, просил найти его бренд Napapisaj, очень редкая штука, но он справился, 10/10
|
||||
</p>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="avatar"></div>
|
||||
<h3 class="username">Anjela Danil</h3>
|
||||
<p class="comment">
|
||||
Норм продавец, 9/10, пук пук
|
||||
</p>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="avatar"></div>
|
||||
<h3 class="username">Hater228</h3>
|
||||
<p class="comment">
|
||||
Как от ****** отойдешь, цену поменяй, клоун
|
||||
</p>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="avatar"></div>
|
||||
<h3 class="username">Bima Daryshev</h3>
|
||||
<p class="comment">
|
||||
При покупке не возникло никаких проблем, предоставляет огромное кол-во скидок, обязательно еще что нибудь у него закажу
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<div class="social-container">
|
||||
<div class="social">
|
||||
<a href="https://t.me/cyxarukShop">
|
||||
<img src="фотки/telega.png" width="100" height="100" alt="Telegram">
|
||||
</a>
|
||||
<h2>← also follow us on tg</h2>
|
||||
</div>
|
||||
<div class="social">
|
||||
<a href="https://www.avito.ru/brands/...">
|
||||
<img src="фотки/avito.png" width="80" height="80" alt="Avito">
|
||||
</a>
|
||||
<h1>← and avito</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="contact-info">
|
||||
<h2>89876320523</h2>
|
||||
<h2>Ulyanovsk, Russia</h2>
|
||||
</nav>
|
||||
|
||||
<style>
|
||||
@media (min-width: 992px) {
|
||||
.navbar .dropdown:hover .dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
.navbar .dropdown .dropdown-menu {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<main class="container my-4">
|
||||
<div class="row align-items-center mb-5">
|
||||
<div class="col-md-6 mb-4 mb-md-0">
|
||||
<img src="img/шмотки2.jpg" alt="Промо" class="img-fluid rounded shadow">
|
||||
</div>
|
||||
<div class="col-md-6 text-center text-md-end d-flex flex-column align-items-md-center">
|
||||
<h2 class="fw-bold mb-3"><em>Official cyxaruk shop website</em></h2>
|
||||
<a href="catalog.html" class="btn btn-lg" style="background-color: #00264d; color: white;">
|
||||
<i class="bi bi-bag me-2"></i>Начать покупки
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-center mb-5">
|
||||
<h1 class="fw-bold">ONLY THE FATTEST STUFF</h1>
|
||||
</div>
|
||||
|
||||
<div class="row g-4 mb-5">
|
||||
<div class="col-md-6">
|
||||
<img src="img/шмотки.jpg" alt="Товары 1" class="img-fluid rounded shadow">
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<img src="img/шмотки31.jpg" alt="Товары 2" class="img-fluid rounded shadow">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2 class="text-center mb-4"><em>Отзывы</em></h2>
|
||||
<div class="row g-4">
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<div class="card-body text-center">
|
||||
<img src="img/ava.jpg" class="mx-auto mb-3 rounded-circle" style="width: 60px; height: 60px; object-fit: cover;" alt="AUC EVGEN">
|
||||
<h5 class="card-title">AUC EVGEN</h5>
|
||||
<p class="card-text">Сотрудничаем уже 7 лет, все четко</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<div class="card-body text-center">
|
||||
<img src="img/ava.jpg" class="mx-auto mb-3 rounded-circle" style="width: 60px; height: 60px; object-fit: cover;" alt="Vupava Kitalya">
|
||||
<h5 class="card-title">Vupava Kitalya</h5>
|
||||
<p class="card-text">Просил найти его бренд Napapisaj, очень редкая штука, но он справился, 10/10</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<div class="card-body text-center">
|
||||
<img src="img/ava.jpg" class="mx-auto mb-3 rounded-circle" style="width: 60px; height: 60px; object-fit: cover;" alt="Hater228">
|
||||
<h5 class="card-title">Hater228</h5>
|
||||
<p class="card-text">Как от ****** отойдешь, цену поменяй, клоун</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<div class="card-body text-center">
|
||||
<img src="img/ava.jpg" class="mx-auto mb-3 rounded-circle" style="width: 60px; height: 60px; object-fit: cover;" alt="Anjela Danil">
|
||||
<h5 class="card-title">Anjela Danil</h5>
|
||||
<p class="card-text">Норм продавец, 9/10, пук пук</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow">
|
||||
<div class="card-body text-center">
|
||||
<img src="img/ava.jpg" class="mx-auto mb-3 rounded-circle" style="width: 60px; height: 60px; object-fit: cover;" alt="Bima Daryshev">
|
||||
<h5 class="card-title">Bima Daryshev</h5>
|
||||
<p class="card-text">При покупке не возникло никаких проблем, предоставляет огромное кол-во скидок</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="py-4 mt-5" style="background-color: #00264d; color: white;">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3 mb-md-0">
|
||||
<div class="d-flex align-items-center mb-3">
|
||||
<a href="https://t.me/cyxarukShop" class="text-white me-3">
|
||||
<i class="bi bi-telegram fs-2"></i>
|
||||
</a>
|
||||
<span>Подпишитесь на нас в Telegram</span>
|
||||
</div>
|
||||
<div class="d-flex align-items-center">
|
||||
<a href="https://www.avito.ru/..." class="text-white me-3">
|
||||
<i class="bi bi-shop-window fs-2"></i>
|
||||
</a>
|
||||
<span>Мы на Авито</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 text-md-end">
|
||||
<h5>Контакты</h5>
|
||||
<p><i class="bi bi-telephone me-2"></i>89876320523</p>
|
||||
<p><i class="bi bi-geo-alt me-2"></i>Ulyanovsk, Russia</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
16
node_modules/.bin/acorn
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../acorn/bin/acorn" "$@"
|
||||
else
|
||||
exec node "$basedir/../acorn/bin/acorn" "$@"
|
||||
fi
|
||||
17
node_modules/.bin/acorn.cmd
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\acorn\bin\acorn" %*
|
||||
28
node_modules/.bin/acorn.ps1
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../acorn/bin/acorn" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../acorn/bin/acorn" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../acorn/bin/acorn" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../acorn/bin/acorn" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
16
node_modules/.bin/esbuild
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../esbuild/bin/esbuild" "$@"
|
||||
else
|
||||
exec node "$basedir/../esbuild/bin/esbuild" "$@"
|
||||
fi
|
||||
17
node_modules/.bin/esbuild.cmd
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\esbuild\bin\esbuild" %*
|
||||
28
node_modules/.bin/esbuild.ps1
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../esbuild/bin/esbuild" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../esbuild/bin/esbuild" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../esbuild/bin/esbuild" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../esbuild/bin/esbuild" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
16
node_modules/.bin/eslint
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../eslint/bin/eslint.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../eslint/bin/eslint.js" "$@"
|
||||
fi
|
||||
16
node_modules/.bin/eslint-config-prettier
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../eslint-config-prettier/build/bin/cli.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../eslint-config-prettier/build/bin/cli.js" "$@"
|
||||
fi
|
||||
17
node_modules/.bin/eslint-config-prettier.cmd
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\eslint-config-prettier\build\bin\cli.js" %*
|
||||
28
node_modules/.bin/eslint-config-prettier.ps1
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../eslint-config-prettier/build/bin/cli.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../eslint-config-prettier/build/bin/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../eslint-config-prettier/build/bin/cli.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../eslint-config-prettier/build/bin/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
17
node_modules/.bin/eslint.cmd
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\eslint\bin\eslint.js" %*
|
||||
28
node_modules/.bin/eslint.ps1
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../eslint/bin/eslint.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../eslint/bin/eslint.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../eslint/bin/eslint.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../eslint/bin/eslint.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
16
node_modules/.bin/he
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../he/bin/he" "$@"
|
||||
else
|
||||
exec node "$basedir/../he/bin/he" "$@"
|
||||
fi
|
||||
17
node_modules/.bin/he.cmd
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\he\bin\he" %*
|
||||
28
node_modules/.bin/he.ps1
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../he/bin/he" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../he/bin/he" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../he/bin/he" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../he/bin/he" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
16
node_modules/.bin/http-server
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../http-server/bin/http-server" "$@"
|
||||
else
|
||||
exec node "$basedir/../http-server/bin/http-server" "$@"
|
||||
fi
|
||||
17
node_modules/.bin/http-server.cmd
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\http-server\bin\http-server" %*
|
||||
28
node_modules/.bin/http-server.ps1
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../http-server/bin/http-server" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../http-server/bin/http-server" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../http-server/bin/http-server" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../http-server/bin/http-server" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
16
node_modules/.bin/js-yaml
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../js-yaml/bin/js-yaml.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../js-yaml/bin/js-yaml.js" "$@"
|
||||
fi
|
||||
17
node_modules/.bin/js-yaml.cmd
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\js-yaml\bin\js-yaml.js" %*
|
||||
28
node_modules/.bin/js-yaml.ps1
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
16
node_modules/.bin/json-server
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../json-server/lib/bin.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../json-server/lib/bin.js" "$@"
|
||||
fi
|
||||
17
node_modules/.bin/json-server.cmd
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\json-server\lib\bin.js" %*
|
||||
28
node_modules/.bin/json-server.ps1
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../json-server/lib/bin.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../json-server/lib/bin.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../json-server/lib/bin.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../json-server/lib/bin.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
16
node_modules/.bin/json5
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../json5/lib/cli.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../json5/lib/cli.js" "$@"
|
||||
fi
|
||||
17
node_modules/.bin/json5.cmd
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\json5\lib\cli.js" %*
|
||||
28
node_modules/.bin/json5.ps1
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../json5/lib/cli.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../json5/lib/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../json5/lib/cli.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../json5/lib/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
16
node_modules/.bin/mime
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../mime/cli.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../mime/cli.js" "$@"
|
||||
fi
|
||||
17
node_modules/.bin/mime.cmd
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mime\cli.js" %*
|
||||
28
node_modules/.bin/mime.ps1
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../mime/cli.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../mime/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../mime/cli.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../mime/cli.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
16
node_modules/.bin/nanoid
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../nanoid/bin/nanoid.cjs" "$@"
|
||||
else
|
||||
exec node "$basedir/../nanoid/bin/nanoid.cjs" "$@"
|
||||
fi
|
||||
17
node_modules/.bin/nanoid.cmd
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\nanoid\bin\nanoid.cjs" %*
|
||||
28
node_modules/.bin/nanoid.ps1
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
16
node_modules/.bin/node-which
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../which/bin/node-which" "$@"
|
||||
else
|
||||
exec node "$basedir/../which/bin/node-which" "$@"
|
||||
fi
|
||||
17
node_modules/.bin/node-which.cmd
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\which\bin\node-which" %*
|
||||
28
node_modules/.bin/node-which.ps1
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../which/bin/node-which" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../which/bin/node-which" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../which/bin/node-which" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../which/bin/node-which" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
16
node_modules/.bin/npm-run-all
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../npm-run-all/bin/npm-run-all/index.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../npm-run-all/bin/npm-run-all/index.js" "$@"
|
||||
fi
|
||||
17
node_modules/.bin/npm-run-all.cmd
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\npm-run-all\bin\npm-run-all\index.js" %*
|
||||
28
node_modules/.bin/npm-run-all.ps1
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env pwsh
|
||||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||
|
||||
$exe=""
|
||||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||
# Fix case when both the Windows and Linux builds of Node
|
||||
# are installed in the same directory
|
||||
$exe=".exe"
|
||||
}
|
||||
$ret=0
|
||||
if (Test-Path "$basedir/node$exe") {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "$basedir/node$exe" "$basedir/../npm-run-all/bin/npm-run-all/index.js" $args
|
||||
} else {
|
||||
& "$basedir/node$exe" "$basedir/../npm-run-all/bin/npm-run-all/index.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
} else {
|
||||
# Support pipeline input
|
||||
if ($MyInvocation.ExpectingInput) {
|
||||
$input | & "node$exe" "$basedir/../npm-run-all/bin/npm-run-all/index.js" $args
|
||||
} else {
|
||||
& "node$exe" "$basedir/../npm-run-all/bin/npm-run-all/index.js" $args
|
||||
}
|
||||
$ret=$LASTEXITCODE
|
||||
}
|
||||
exit $ret
|
||||
16
node_modules/.bin/opener
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*|*MINGW*|*MSYS*)
|
||||
if command -v cygpath > /dev/null 2>&1; then
|
||||
basedir=`cygpath -w "$basedir"`
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../opener/bin/opener-bin.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../opener/bin/opener-bin.js" "$@"
|
||||
fi
|
||||
17
node_modules/.bin/opener.cmd
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
@ECHO off
|
||||
GOTO start
|
||||
:find_dp0
|
||||
SET dp0=%~dp0
|
||||
EXIT /b
|
||||
:start
|
||||
SETLOCAL
|
||||
CALL :find_dp0
|
||||
|
||||
IF EXIST "%dp0%\node.exe" (
|
||||
SET "_prog=%dp0%\node.exe"
|
||||
) ELSE (
|
||||
SET "_prog=node"
|
||||
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||
)
|
||||
|
||||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\opener\bin\opener-bin.js" %*
|
||||