отчет

This commit is contained in:
Владимир Данилов 2023-12-19 20:23:11 +04:00
parent cd47298d6e
commit 83490711d5
9852 changed files with 1194103 additions and 0 deletions

20
Lab3/.eslintrc.json Normal file
View File

@ -0,0 +1,20 @@
{
"env": {
"browser": true,
"es2021": true
},
"extends": "airbnb-base",
"parserOptions": {
"ecmaVersion": 12,
"sourceType": "module"
},
"rules": {
"quotes": "off",
"indent": "off",
"no-console": "off",
"no-use-before-define": "off",
"no-alert": "off",
"no-restricted-globals": "off",
"quote-props": "off"
}
}

123
Lab3/Admin.html Normal file
View File

@ -0,0 +1,123 @@
<html lang="ru">
<head>
<meta charset = "utf-8">
<title> Техник </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="module" src="./node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
<link href="./node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"/>
<link href="./node_modules/@fortawesome/fontawesome-free/css/all.min.css" rel="stylesheet"/>
<link rel = "stylesheet" href = "./style.css">
</head>
<body class="h-100 d-flex flex-column">
<header>
<nav class="navbar navbar-expand-md">
<div class="container-fluid">
<a class = "navbar-brand" href = "./" style="color: #6A3502;">
<i class="fa-solid fa-microchip"></i>
Техник
</a>
<form class="d-flex">
<input class="form-control" type="search" placeholder="Поиск по сайту" aria-label="Search">
<button class="btn btn-outline-*" type="submit" style="color: #6A3502;"><i class="fa-solid fa-search"></i></button>
</form>
</div>
</nav>
</header>
<main class="container-fluid p-2">
<div class="btn-group" role="group">
<button id="items-add" class="btn btn-info">Добавить товар (диалог)</button>
</div>
<div>
<table id="items-table" class="table table-striped">
<thead>
<th scope="col"></th>
<th scope="col" class="w-25">Каталог</th>
<th scope="col" class="w-25">Модель</th>
<th scope="col" class="w-25">Цена</th>
<th scope="col" class="w-25">Количество</th>
<th scope="col" class="w-25">Сумма</th>
<th scope="col"></th>
<th scope="col"></th>
</thead>
<tbody></tbody>
</table>
</div>
</main>
<footer class="footer mt-auto d-flex flex-shrink-0 align-items-center">
© 2023 Компания Техник. Администрация Сайта не несет ответственности за размещаемые Пользователями материалы (в т.ч. информацию и изображения), их содержание и качество.
</footer>
<div id="items-update" class="modal fade" tabindex="-1" data-bs-backdrop="static" data-bs-keyboard="false">
<div class="modal-dialog modal-dialog-scrollable">
<form id="items-form" class="needs-validation" novalidate>
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="items-update-title"></h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="text-center">
<img id="image-preview" src="https://via.placeholder.com/200" class="d-block"
alt="placeholder" style="width: 200; margin-left: auto; margin-right: auto;">
</div>
<input id="items-line-id" type="number" hidden>
<div class="mb-2">
<label for="item" class="form-label">Каталог</label>
<select id="item" class="form-select" name="selected" required>
</select>
</div>
<div class="mb-2">
<label for="product" class="form-label">Товары</label>
<select id="product" class="form-select" name="selected" required>
</select>
</div>
<div class="mb-2">
<label class="form-label" for="model">Модель</label>
<input id="model" name="model" class="form-control" type="text" required>
</div>
<div class="mb-2">
<label class="form-label" for="image">Изображение</label>
<input id="image" type="file" name="image" class="form-control" accept="image/*">
</div>
<div class="mb-2">
<label class="form-label" for="price">Цена</label>
<input id="price" name="price" class="form-control" type="number" value="0.00" min="1000.00"
step="0.50" required>
</div>
<div class="mb-2">
<label class="form-label" for="count">Количество</label>
<input id="count" name="count" class="form-control" type="number" value="0" min="1" step="1"
required>
</div>
<div class="mb-2">
<label class="form-label" for="description">Описание</label>
<textarea id="description" name="description" class="form-control" type="text" rows="14"></textarea>
</div>
<div class="mb-2">
<label class="form-label" for="specific">Характеристика</label>
<textarea id="specific" name="specific" class="form-control" type="text" rows="3"></textarea>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Закрыть</button>
<button type="submit" class="btn btn-primary">Сохранить</button>
</div>
</div>
</form>
</div>
</div>
<script type="module">
import validation from "./js/validation";
import { linesForm } from "./js/lines";
document.addEventListener('DOMContentLoaded', () => {
validation();
linesForm();
});
</script>
</body>
</html>

195
Lab3/Catalog.html Normal file
View File

@ -0,0 +1,195 @@
<html lang="ru">
<head>
<meta charset = "utf-8">
<title> Техник </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="module" src="./node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
<link href="./node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"/>
<link href="./node_modules/@fortawesome/fontawesome-free/css/all.min.css" rel="stylesheet"/>
<link rel = "stylesheet" href = "./style.css">
</head>
<body class="h-100 d-flex flex-column">
<header>
<nav class="navbar navbar-expand-md">
<div class="container-fluid">
<a class = "navbar-brand" href = "./" style="color: #6A3502;">
<i class="fa-solid fa-microchip"></i>
Техник
</a>
<form class="d-flex">
<input class="form-control" type="search" placeholder="Поиск по сайту" aria-label="Search">
<button class="btn btn-outline-*" type="submit" style="color: #6A3502;"><i class="fa-solid fa-search"></i></button>
</form>
<a class="nav-link" href="./Login.html">Вход</a>
</div>
</nav>
</header>
<main class="container-fluid" style="background-color: antiquewhite;">
<div class="row d-flex">
<article class="col-lg-3">
<article class="nav-link" style="background-color: white;">
<div class="d-flex flex-column">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarAvailability"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<h4>Наличие в магазине</h4>
</button>
<div class="navbar-collapse collapse" id="navbarAvailability">
<div class="navbar-nav">
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox1" name="checkbox1" type="checkbox" checked>
<label class="form-check-label" for="checkbox1">В наличии</label>
</div>
</li>
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox2" name="checkbox2" type="checkbox" checked>
<label class="form-check-label" for="checkbox2">Под заказ</label>
</div>
</li>
</div>
</div>
</article>
<article class="nav-link" style="background-color: white;">
<div class="d-flex flex-column">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarScreenDg"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<h4>Диагональ экрана (дюйм)</h4>
</button>
<div class="navbar-collapse collapse" id="navbarScreenDg">
<div class="navbar-nav">
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" type="radio" name="radio-example" id="radio0" checked>
<label class="form-check-label" for="radio0">Все</label>
</div>
</li>
<li>
<div class="form-check me-md-3">
<input class="form-check-input" type="radio" name="radio-example" id="radio1">
<label class="form-check-label" for="radio1">Менее 13.9</label>
</div>
</li>
<li>
<div class="form-check">
<input class="form-check-input" type="radio" name="radio-example" id="radio2">
<label class="form-check-label" for="radio2">14 - 14.9</label>
</div>
</li>
<li>
<div class="form-check">
<input class="form-check-input" type="radio" name="radio-example" id="radio4">
<label class="form-check-label" for="radio4">16 и более</label>
</div>
</li>
</div>
</div>
</article>
<article class="nav-link" style="background-color: white;">
<div class="d-flex flex-column">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarRAM"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<h4>Объем оперативной памяти (ГБ)</h4>
</button>
<div class="navbar-collapse collapse" id="navbarRAM">
<div class="navbar-nav">
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox1" name="checkbox1" type="checkbox">
<label class="form-check-label" for="checkbox1">4 ГБ</label>
</div>
</li>
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox2" name="checkbox2" type="checkbox">
<label class="form-check-label" for="checkbox2">6 ГБ</label>
</div>
</li>
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox2" name="checkbox2" type="checkbox">
<label class="form-check-label" for="checkbox2">8 ГБ</label>
</div>
</li>
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox2" name="checkbox2" type="checkbox">
<label class="form-check-label" for="checkbox2">12 ГБ</label>
</div>
</li>
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox2" name="checkbox2" type="checkbox">
<label class="form-check-label" for="checkbox2">16 ГБ</label>
</div>
</li>
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox2" name="checkbox2" type="checkbox">
<label class="form-check-label" for="checkbox2">32 ГБ</label>
</div>
</li>
</div>
</div>
</article>
<article class="nav-link" style="background-color: white;">
<div class="d-flex flex-column">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCreateCPU"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<h4>Производитель процессора</h4>
</button>
<div class="navbar-collapse collapse" id="navbarCreateCPU">
<div class="navbar-nav">
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox1" name="checkbox1" type="checkbox">
<label class="form-check-label" for="checkbox1">AMD</label>
</div>
</li>
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox2" name="checkbox2" type="checkbox">
<label class="form-check-label" for="checkbox2">Apple</label>
</div>
</li>
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox2" name="checkbox2" type="checkbox">
<label class="form-check-label" for="checkbox2">Intel</label>
</div>
</li>
</div>
</div>
</article>
</article>
<div class="container col-lg-9">
<div id="items-catalog">
</div>
</div>
</div>
</main>
<footer class="footer mt-auto d-flex flex-shrink-0 align-items-center">
© 2023 Компания Техник. Администрация Сайта не несет ответственности за размещаемые Пользователями материалы (в т.ч. информацию и изображения), их содержание и качество.
</footer>
<script type="module">
import validation from "./js/validation";
import { linesPageForm } from "./js/lines"
document.addEventListener('DOMContentLoaded', () => {
validation();
const urlParams = new URLSearchParams(location.search);
linesPageForm(urlParams.get("id"));
});
</script>
</body>
</html>

90
Lab3/Edit.html Normal file
View File

@ -0,0 +1,90 @@
<html lang="ru">
<head>
<meta charset = "utf-8">
<title> Техник </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="module" src="./node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
<link href="./node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"/>
<link href="./node_modules/@fortawesome/fontawesome-free/css/all.min.css" rel="stylesheet"/>
<link rel = "stylesheet" href = "./style.css">
</head>
<body class="h-100 d-flex flex-column">
<header>
<nav class="navbar navbar-expand-md">
<div class="container-fluid">
<a class = "navbar-brand" href = "./" style="color: #6A3502;">
<i class="fa-solid fa-microchip"></i>
Техник
</a>
<form class="d-flex">
<input class="form-control" type="search" placeholder="Поиск по сайту" aria-label="Search">
<button class="btn btn-outline-*" type="submit" style="color: #6A3502;"><i class="fa-solid fa-search"></i></button>
</form>
</div>
</nav>
</header>
<main class="container-fluid p-2">
<div class="text-center">
<img id="image-preview" src="https://via.placeholder.com/200" class="rounded rounded-circle" alt="placeholder" style="width: 200;">
</div>
<form id="items-form" class="needs-validation" novalidate>
<div class="mb-2">
<label for="catalog" class="form-label">Каталог</label>
<select id="catalog" class="form-select" name="selected" required>
</select>
</div>
<div class="mb-2">
<label for="item" class="form-label">Товары</label>
<select id="item" class="form-select" name="selected" required>
</select>
</div>
<div class="mb-2">
<label class="form-label" for="model">Модель</label>
<input id="model" name="model" class="form-control" type="text" required>
</div>
<div class="mb-2">
<label class="form-label" for="image">Изображение</label>
<input id="image" type="file" name="image" class="form-control" accept="image/*">
</div>
<div class="mb-2">
<label class="form-label" for="price">Цена</label>
<input id="price" name="price" class="form-control" type="number" value="0.00" min="1000.00" step="0.50"
required>
</div>
<div class="mb-2">
<label class="form-label" for="count">Количество</label>
<input id="count" name="count" class="form-control" type="number" value="0" min="1" step="1" required>
</div>
<div class="mb-2">
<label class="form-label" for="description">Описание</label>
<input id="description" name="description" class="form-control" type="text" required>
</div>
<div class="mb-2">
<label class="form-label" for="specific">Характеристика</label>
<input id="specific" name="specific" class="form-control" type="text" required>
</div>
<a href="/Admin.html" class="btn btn-secondary">Назад</a>
<button type="submit" class="btn btn-primary">Сохранить</button>
</form>
</main>
<footer class="footer mt-auto d-flex flex-shrink-0 align-items-center">
© 2023 Компания Техник. Администрация Сайта не несет ответственности за размещаемые Пользователями материалы (в т.ч. информацию и изображения), их содержание и качество.
</footer>
<script type="module">
import validation from "./js/validation";
import { linesPageForm } from "./js/lines"
document.addEventListener('DOMContentLoaded', () => {
validation();
linesPageForm();
});
</script>
</body>
</html>

BIN
Lab3/Image/Blog1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
Lab3/Image/Blog2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 KiB

BIN
Lab3/Image/Blog3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
Lab3/Image/Blog4.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
Lab3/Image/Inoplanet.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

BIN
Lab3/Image/Laptop1-1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

BIN
Lab3/Image/Laptop2-1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

BIN
Lab3/Image/Laptop3-1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
Lab3/Image/Laptop4-1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

BIN
Lab3/Image/Laptop5-1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
Lab3/Image/Laptop5-2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
Lab3/Image/Laptop5-3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

BIN
Lab3/Image/Laptop5-4.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

BIN
Lab3/Image/Laptop5-5.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
Lab3/Image/News1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
Lab3/Image/News2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
Lab3/Image/News3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

BIN
Lab3/Image/News4.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

BIN
Lab3/Image/honor5A.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
Lab3/Image/honor8a.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
Lab3/Image/playStation5.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

BIN
Lab3/Image/realmeC3.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

57
Lab3/Login.html Normal file
View File

@ -0,0 +1,57 @@
<html lang="ru">
<head>
<meta charset = "utf-8">
<title> Техник </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="module" src="./node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
<link href="./node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"/>
<link href="./node_modules/@fortawesome/fontawesome-free/css/all.min.css" rel="stylesheet"/>
<link rel = "stylesheet" href = "./style.css">
</head>
<body class="h-100 d-flex flex-column">
<header>
<nav class="navbar navbar-expand-md">
<div class="container-fluid">
<a class = "navbar-brand" href = "./" style="color: #6A3502;">
<i class="fa-solid fa-microchip"></i>
Техник
</a>
<form class="d-flex">
<input class="form-control" type="search" placeholder="Поиск по сайту" aria-label="Search">
<button class="btn btn-outline-*" type="submit" style="color: #6A3502;"><i class="fa-solid fa-search"></i></button>
</form>
</div>
</nav>
</header>
<main class="container-fluid">
<div class="row justify-content-center">
<form class="col-md-6 m-0" action="./Profile.html" method="get">
<div class="mb-2">
<label class="form-label" for="email">E-mail</label>
<input id="email" name="email" class="form-control" type="email" placeholder="name@example.ru" required>
</div>
<div class="mb-2">
<label class="form-label" for="password">Пароль</label>
<input id="password" name="password" class="form-control" type="password" required>
</div>
<div class="mb-2">
<a class="form-text" href="./Registration.html">Зарегистрироваться</a>
</div>
<div class="text-center">
<button class="btn btn-primary w-50" type="submit" style="background-color: #F4A406;">Войти</button>
</div>
</form>
</div>
</main>
<footer class="footer mt-auto d-flex flex-shrink-0 align-items-center">
© 2023 Компания Техник. Администрация Сайта не несет ответственности за размещаемые Пользователями материалы (в т.ч. информацию и изображения), их содержание и качество.
</footer>
</body>
</html>

92
Lab3/Product.html Normal file
View File

@ -0,0 +1,92 @@
<html lang="ru">
<head>
<meta charset = "utf-8">
<title> Техник </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="module" src="./node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
<link href="./node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"/>
<link href="./node_modules/@fortawesome/fontawesome-free/css/all.min.css" rel="stylesheet"/>
<link rel = "stylesheet" href = "./style.css">
</head>
<body class="h-100 d-flex flex-column">
<header>
<nav class="navbar navbar-expand-md">
<div class="container-fluid">
<a class = "navbar-brand" href = "./" style="color: #6A3502;">
<i class="fa-solid fa-microchip"></i>
Техник
</a>
<form class="d-flex">
<input class="form-control" type="search" placeholder="Поиск по сайту" aria-label="Search">
<button class="btn btn-outline-*" type="submit" style="color: #6A3502;"><i class="fa-solid fa-search"></i></button>
</form>
<a class="nav-link" href="./Login.html">Вход</a>
</div>
</nav>
</header>
<main class="container-fluid" style="background-color: antiquewhite;">
<h4 id="model"></h4>
<div class="d-flex row">
<article class="d-flex flex-column p-2 col-lg-5" style="background-color: white; border-radius: 12px;">
<a class="image-container"><img id="image-preview" src="https://via.placeholder.com/200" class="d-block" alt="logo" width="400" id="image-preview"></a>
</article>
<article class="d-flex flex-column p-2 col-lg-7">
<div class="p-2">
<div class="navbar-nav d-flex flex-lg-column" style="background-color: white; border-radius: 12px;">
<h5 class="text-center" id="price"></h5>
<button class="btn btn-warning justify-content-end" type="submit">Купить</button>
</div>
</div>
<div class="navbar-nav p-2">
<div style="background-color: white; border-radius: 12px;">
<h5 class="p-2">Описание</h5>
<h5 class="nav-link p-2" style="font-size: larger;" id="description"></h5>
</div>
</div>
</article>
</div>
<div>
<article class="d-flex flex-column t-2">
<div class="navbar-nav p-2">
<div style="background-color: white; border-radius: 12px;">
<h5 class="p-2">Характеристика</h5>
<a class="nav-link p-2" style="font-size: larger;" id="specific"></a>
</div>
</div>
</article>
</div>
<div>
<article class="d-flex flex-column t-2">
<div class="navbar-nav p-2">
<div style="background-color: white; border-radius: 12px;">
<h5 class="p-2">Самый популярный отзыв</h5>
<a class="nav-link p-2" style="font-size: larger;"> <p>markoni89</p> <b>Срок использования:</b> Менее месяца <p><b>Достоинства</b></p><p> отличный процессор 12 поколения, хорош и мощностью и энергопотреблением;</p>
<p><b>Недостатки</b></p><p>сильно маркий пластик корпуса (как и у всей линейки ноутов от MSI), странно что об этом не подумали заранее и вдвойне странно при такой удачной клавиатуре;</p>
<p><b>Комментарий</b></p><p>На данный момент это наилучший вариант для покупки по критерию цена-качество. Железо крайне бодрое, в этой ценовой категории у других производителей нет адекватной конкуренции, даже следующий класс может уступать данному товарищу от MSI.</p></a>
</div>
</div>
</article>
</div>
</main>
<footer class="footer mt-auto d-flex flex-shrink-0 align-items-center">
© 2023 Компания Техник. Администрация Сайта не несет ответственности за размещаемые Пользователями материалы (в т.ч. информацию и изображения), их содержание и качество.
</footer>
<script type="module">
import validation from "./js/validation";
import { productPage } from "./js/lines"
document.addEventListener('DOMContentLoaded', () => {
validation();
productPage();
});
</script>
</body>
</html>

70
Lab3/Profile.html Normal file
View File

@ -0,0 +1,70 @@
<html lang="ru">
<head>
<meta charset = "utf-8">
<title> Техник </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="module" src="./node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
<link href="./node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"/>
<link href="./node_modules/@fortawesome/fontawesome-free/css/all.min.css" rel="stylesheet"/>
<link rel = "stylesheet" href = "./style.css">
</head>
<body class="h-100 d-flex flex-column">
<header>
<nav class="navbar navbar-expand-md">
<div class="container-fluid">
<a class = "navbar-brand" href = "./" style="color: #6A3502;">
<i class="fa-solid fa-microchip"></i>
Техник
</a>
<form class="d-flex">
<input class="form-control" type="search" placeholder="Поиск по сайту" aria-label="Search">
<button class="btn btn-outline-*" type="submit" style="color: #6A3502;"><i class="fa-solid fa-search"></i></button>
</form>
<a class="nav-link" href="./Admin.html">Администрация</a>
</div>
</nav>
</header>
<main class="container-fluid" style="background-color: antiquewhite;">
<article class="p-3">
<div class="d-flex flex-lg-row justify-content-center" style="background-color: white; border-radius: 12px;">
<a><img src="Image/Inoplanet.png" class="img-thumbnail" alt="logo" width="200"></a>
<h5 class="p-2">Пришелец-ВА1240</h5>
</div>
</article>
<article class="p-3">
<div class="d-flex flex-lg-row justify-content-center" style="background-color: white; border-radius: 12px;">
<div class="d-flex flex-column p-2">
<h5 class="p-2">Доставляется</h5>
<a class="nav-link p-2" href="#">15.6" Ноутбук GIGABYTE G5 MF черный [Full HD (1920x1080), IPS, Intel
Core i5-12500H, ядра: 4 + 8 х 2.5 ГГц, RAM 16 ГБ, SSD 512 ГБ, GeForce RTX 4050 для ноутбуков 6 ГБ, без ОС] </a>
<h5 class="p-2">Прибудет 29.12.2023</h5>
</div>
<a class="image-container p-2"><img src="Image/Laptop1-1.jpg" alt="logo" width="128"></a>
</div>
</article>
<article class="p-3">
<div class="d-flex flex-lg-row justify-content-center" style="background-color: white; border-radius: 12px;">
<div class="d-flex flex-column p-2">
<h5 class="p-2">Завершенные</h5>
<a class="nav-link p-2" href="#">17.3" Ноутбук ARDOR GAMING NEO G17-I7ND307 черный [Full HD (1920x1080), IPS, Intel
Core i7-12650H, ядра: 6 + 4 х 2.3 ГГц, RAM 16 ГБ, SSD 512 ГБ, GeForce
RTX 4060 для ноутбуков 8 ГБ, без ОС] </a>
<h5 class="p-2">Получен 29.02.2023</h5>
</div>
<a class="image-container p-2"><img src="Image/Laptop4-1.jpg" alt="logo" width="128"></a>
</div>
</article>
</main>
<footer class="footer mt-auto d-flex flex-shrink-0 align-items-center">
© 2023 Компания Техник. Администрация Сайта не несет ответственности за размещаемые Пользователями материалы (в т.ч. информацию и изображения), их содержание и качество.
</footer>
</body>
</html>

81
Lab3/Registration.html Normal file
View File

@ -0,0 +1,81 @@
<html lang="ru">
<head>
<meta charset = "utf-8">
<title> Техник </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="module" src="./node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
<link href="./node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"/>
<link href="./node_modules/@fortawesome/fontawesome-free/css/all.min.css" rel="stylesheet"/>
<link rel = "stylesheet" href = "./style.css">
</head>
<body class="h-100 d-flex flex-column">
<header>
<nav class="navbar navbar-expand-md">
<div class="container-fluid">
<a class = "navbar-brand" href = "./" style="color: #6A3502;">
<i class="fa-solid fa-microchip"></i>
Техник
</a>
<form class="d-flex">
<input class="form-control" type="search" placeholder="Поиск по сайту" aria-label="Search">
<button class="btn btn-outline-*" type="submit" style="color: #6A3502;"><i class="fa-solid fa-search"></i></button>
</form>
<a class="nav-link" href="./Login.html">Вход</a>
</div>
</nav>
</header>
<main class="container-fluid">
<div class="row justify-content-center">
<form class="col-md-6 m-0" action="./Profile.html" method="get">
<div class="mb-2">
<label class="form-label" for="lastname">Фамилия*</label>
<input id="lastname" name="lastname" class="form-control" type="text" required>
</div>
<div class="mb-2">
<label class="form-label" for="firstname">Имя*</label>
<input id="firstname" name="firstname" class="form-control" type="text" required>
</div>
<div class="mb-2">
<label class="form-label" for="date">Дата рождения</label>
<input id="date" name="date" class="form-control" type="date">
</div>
<div class="mb-2">
<label class="form-label" for="email">E-mail*</label>
<input id="email" name="email" class="form-control" type="email" placeholder="name@example.ru" required>
</div>
<div class="mb-2">
<label class="form-label" for="password">Пароль*</label>
<input id="password" name="password" class="form-control" type="password" required>
</div>
<div class="mb-2 d-md-flex flex-md-row">
<div class="form-check me-md-3">
<input class="form-check-input" id="checkbox1" name="checkbox1" type="checkbox">
<label class="form-check-label" for="checkbox1">Получать акционные предложения по почте</label>
</div>
<div class="form-check">
<input class="form-check-input" id="checkbox2" name="checkbox2" type="checkbox" required>
<label class="form-check-label" for="checkbox2">Соглашение об обработке персональных данных*</label>
</div>
</div>
<div class="mb-2">
<a class="form-text">* - поле обязательное для заполнения</a>
</div>
<div class="text-center">
<button class="btn btn-primary w-50" type="submit" style="background-color: #F4A406;">Зарегистрироваться</button>
</div>
</form>
</div>
</main>
<footer class="footer mt-auto d-flex flex-shrink-0 align-items-center">
© 2023 Компания Техник. Администрация Сайта не несет ответственности за размещаемые Пользователями материалы (в т.ч. информацию и изображения), их содержание и качество.
</footer>
</body>
</html>

148
Lab3/data.json Normal file

File diff suppressed because one or more lines are too long

102
Lab3/dist/Admin.html vendored Normal file
View File

@ -0,0 +1,102 @@
<html lang="ru">
<head>
<meta charset = "utf-8">
<title> Техник </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="module" crossorigin src="/assets/page7-a02d5850.js"></script>
<link rel="modulepreload" crossorigin href="/assets/style-61b38a6d.js">
<link rel="stylesheet" href="/assets/style-b8580ced.css">
</head>
<body class="h-100 d-flex flex-column">
<header>
<nav class="navbar navbar-expand-md">
<div class="container-fluid">
<a class = "navbar-brand" href = "./" style="color: #6A3502;">
<i class="fa-solid fa-microchip"></i>
Техник
</a>
<form class="d-flex">
<input class="form-control" type="search" placeholder="Поиск по сайту" aria-label="Search">
<button class="btn btn-outline-*" type="submit" style="color: #6A3502;"><i class="fa-solid fa-search"></i></button>
</form>
</div>
</nav>
</header>
<main class="container-fluid p-2">
<div class="btn-group" role="group">
<button id="items-add" class="btn btn-info">Добавить товар (диалог)</button>
<a class="btn btn-success" href="/Edit.html">Добавить товар (страница)</a>
</div>
<div>
<table id="items-table" class="table table-striped">
<thead>
<th scope="col"></th>
<th scope="col" class="w-25">Товар</th>
<th scope="col" class="w-25">Цена</th>
<th scope="col" class="w-25">Количество</th>
<th scope="col" class="w-25">Сумма</th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
</thead>
<tbody></tbody>
</table>
</div>
</main>
<footer class="footer mt-auto d-flex flex-shrink-0 justify-content-center align-items-center">
Автор, 2022
</footer>
<div id="items-update" class="modal fade" tabindex="-1" data-bs-backdrop="static" data-bs-keyboard="false">
<div class="modal-dialog">
<form id="items-form" class="needs-validation" novalidate>
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="items-update-title"></h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="text-center">
<img id="image-preview" src="https://via.placeholder.com/200" class="rounded rounded-circle"
alt="placeholder">
</div>
<input id="items-line-id" type="number" hidden>
<div class="mb-2">
<label for="item" class="form-label">Товары</label>
<select id="item" class="form-select" name="selected" required>
</select>
</div>
<div class="mb-2">
<label class="form-label" for="price">Цена</label>
<input id="price" name="price" class="form-control" type="number" value="0.00" min="1000.00"
step="0.50" required>
</div>
<div class="mb-2">
<label class="form-label" for="count">Количество</label>
<input id="count" name="count" class="form-control" type="number" value="0" min="1" step="1"
required>
</div>
<div class="mb-2">
<label class="form-label" for="image">Изображение</label>
<input id="image" type="file" name="image" class="form-control" accept="image/*">
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Закрыть</button>
<button type="submit" class="btn btn-primary">Сохранить</button>
</div>
</div>
</form>
</div>
</div>
</body>
</html>

253
Lab3/dist/Catalog.html vendored Normal file
View File

@ -0,0 +1,253 @@
<html lang="ru">
<head>
<meta charset = "utf-8">
<title> Техник </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="module" crossorigin src="/assets/style-61b38a6d.js"></script>
<link rel="stylesheet" href="/assets/style-b8580ced.css">
</head>
<body class="h-100 d-flex flex-column">
<header>
<nav class="navbar navbar-expand-md">
<div class="container-fluid">
<a class = "navbar-brand" href = "./" style="color: #6A3502;">
<i class="fa-solid fa-microchip"></i>
Техник
</a>
<form class="d-flex">
<input class="form-control" type="search" placeholder="Поиск по сайту" aria-label="Search">
<button class="btn btn-outline-*" type="submit" style="color: #6A3502;"><i class="fa-solid fa-search"></i></button>
</form>
<a class="nav-link" href="./Login.html">Вход</a>
</div>
</nav>
</header>
<main class="container-fluid" style="background-color: antiquewhite;">
<div class="row d-flex">
<article class="col-lg-3">
<article class="nav-link" style="background-color: white;">
<div class="d-flex flex-column">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarAvailability"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<h4>Наличие в магазине</h4>
</button>
<div class="navbar-collapse collapse" id="navbarAvailability">
<div class="navbar-nav">
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox1" name="checkbox1" type="checkbox" checked>
<label class="form-check-label" for="checkbox1">В наличии</label>
</div>
</li>
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox2" name="checkbox2" type="checkbox" checked>
<label class="form-check-label" for="checkbox2">Под заказ</label>
</div>
</li>
</div>
</div>
</article>
<article class="nav-link" style="background-color: white;">
<div class="d-flex flex-column">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarScreenDg"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<h4>Диагональ экрана (дюйм)</h4>
</button>
<div class="navbar-collapse collapse" id="navbarScreenDg">
<div class="navbar-nav">
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" type="radio" name="radio-example" id="radio0" checked>
<label class="form-check-label" for="radio0">Все</label>
</div>
</li>
<li>
<div class="form-check me-md-3">
<input class="form-check-input" type="radio" name="radio-example" id="radio1">
<label class="form-check-label" for="radio1">Менее 13.9</label>
</div>
</li>
<li>
<div class="form-check">
<input class="form-check-input" type="radio" name="radio-example" id="radio2">
<label class="form-check-label" for="radio2">14 - 14.9</label>
</div>
</li>
<li>
<div class="form-check">
<input class="form-check-input" type="radio" name="radio-example" id="radio4">
<label class="form-check-label" for="radio4">16 и более</label>
</div>
</li>
</div>
</div>
</article>
<article class="nav-link" style="background-color: white;">
<div class="d-flex flex-column">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarRAM"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<h4>Объем оперативной памяти (ГБ)</h4>
</button>
<div class="navbar-collapse collapse" id="navbarRAM">
<div class="navbar-nav">
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox1" name="checkbox1" type="checkbox">
<label class="form-check-label" for="checkbox1">4 ГБ</label>
</div>
</li>
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox2" name="checkbox2" type="checkbox">
<label class="form-check-label" for="checkbox2">6 ГБ</label>
</div>
</li>
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox2" name="checkbox2" type="checkbox">
<label class="form-check-label" for="checkbox2">8 ГБ</label>
</div>
</li>
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox2" name="checkbox2" type="checkbox">
<label class="form-check-label" for="checkbox2">12 ГБ</label>
</div>
</li>
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox2" name="checkbox2" type="checkbox">
<label class="form-check-label" for="checkbox2">16 ГБ</label>
</div>
</li>
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox2" name="checkbox2" type="checkbox">
<label class="form-check-label" for="checkbox2">32 ГБ</label>
</div>
</li>
</div>
</div>
</article>
<article class="nav-link" style="background-color: white;">
<div class="d-flex flex-column">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCreateCPU"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<h4>Производитель процессора</h4>
</button>
<div class="navbar-collapse collapse" id="navbarCreateCPU">
<div class="navbar-nav">
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox1" name="checkbox1" type="checkbox">
<label class="form-check-label" for="checkbox1">AMD</label>
</div>
</li>
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox2" name="checkbox2" type="checkbox">
<label class="form-check-label" for="checkbox2">Apple</label>
</div>
</li>
<li class="nav-item">
<div class="form-check">
<input class="form-check-input" id="checkbox2" name="checkbox2" type="checkbox">
<label class="form-check-label" for="checkbox2">Intel</label>
</div>
</li>
</div>
</div>
</article>
</article>
<article class="col-lg-9">
<div class="p-2 t-2">
<div class="navbar-nav d-flex flex-lg-row p-2 t-2" style="background-color: white; border-radius: 12px;">
<a class="image-container"><img src="/assets/Laptop1-1-caaafcc6.jpg" alt="logo" width="128"></a>
<a class="nav-link" href="#">15.6" Ноутбук GIGABYTE G5 MF черный [Full HD (1920x1080), IPS, Intel
Core i5-12500H, ядра: 4 + 8 х 2.5 ГГц, RAM 16 ГБ, SSD 512 ГБ, GeForce
RTX 4050 для ноутбуков 6 ГБ, без ОС]
</a>
<div class="nav-link d-flex flex-column">
<a class="nav-link" style="font-size: larger;">79 999 Р</a>
<button class="btn btn-outline-warning" type="submit">Купить</button>
<a class="p-2"><button class="btn btn-outline-dark" type="submit">Удалить товар</button></a>
</div>
</div>
</div>
<div class="p-2 t-2">
<div class="navbar-nav d-flex flex-lg-row p-2 t-2" style="background-color: white; border-radius: 12px;">
<a class="image-container"><img src="/assets/Laptop2-1-7a4e5c4a.jpg" alt="logo" width="128"></a>
<a class="nav-link" href="#">17.3" Ноутбук MSI GF76 Katana 17 B12VFK-271XRU черный [Full HD (1920x1080), IPS, Intel
Core i7-12650H, ядра: 6 + 4 х 2.3 ГГц, RAM 16 ГБ, SSD 512 ГБ, GeForce
RTX 4060 для ноутбуков 8 ГБ, без ОС]
</a>
<div class="nav-link d-flex flex-column">
<a class="nav-link" style="font-size: larger;">111 999 Р</a>
<button class="btn btn-outline-warning" type="submit">Купить</button>
<a class="p-2"><button class="btn btn-outline-dark" type="submit">Удалить товар</button></a>
</div>
</div>
</div>
<div class="p-2 t-2">
<div class="navbar-nav d-flex flex-lg-row p-2 t-2" style="background-color: white; border-radius: 12px;">
<a class="image-container"><img src="/assets/Laptop3-1-6a66d335.jpg" alt="logo" width="128"></a>
<a class="nav-link" href="#">17.3" Ноутбук ASUS TUF Gaming F17 FX706HF-HX014 черный [Full HD (1920x1080), IPS, Intel
Core i5-11400H, ядра: 6 х 2.7 ГГц, RAM 16 ГБ, SSD 512 ГБ, GeForce
RTX 2050 4 ГБ, без ОС]
</a>
<div class="nav-link d-flex flex-column">
<a class="nav-link" style="font-size: larger;">77 999 Р</a>
<button class="btn btn-outline-warning" type="submit">Купить</button>
<a class="p-2"><button class="btn btn-outline-dark" type="submit">Удалить товар</button></a>
</div>
</div>
</div>
<div class="p-2 t-2">
<div class="navbar-nav d-flex flex-lg-row p-2 t-2" style="background-color: white; border-radius: 12px;">
<a class="image-container"><img src="/assets/Laptop4-1-36d8919c.jpg" alt="logo" width="128"></a>
<a class="nav-link" href="#">17.3" Ноутбук ARDOR GAMING NEO G17-I7ND307 черный [Full HD (1920x1080), IPS, Intel
Core i7-12650H, ядра: 6 + 4 х 2.3 ГГц, RAM 16 ГБ, SSD 512 ГБ, GeForce
RTX 4060 для ноутбуков 8 ГБ, без ОС]
</a>
<div class="nav-link d-flex flex-column">
<a class="nav-link" style="font-size: larger;">109 999 Р</a>
<button class="btn btn-outline-warning" type="submit">Купить</button>
<a class="p-2"><button class="btn btn-outline-dark" type="submit">Удалить товар</button></a>
</div>
</div>
</div>
<div class="p-2 t-2">
<div class="navbar-nav d-flex flex-lg-row p-2 t-2" style="background-color: white; border-radius: 12px;">
<a class="image-container"><img src="/assets/Laptop5-1-ccacd5d4.jpg" alt="logo" width="128"></a>
<a class="nav-link" href="./Product.html">15.6" Ноутбук MSI Modern 15 B12M-211RU черный [Full HD (1920x1080), IPS, Intel
Core i3-1215U, ядра: 2 + 4 х 1.2 ГГц, RAM 8 ГБ, SSD 256 ГБ, Intel UHD Graphics , Windows
11 Home Single Language]
</a>
<div class="nav-link d-flex flex-column">
<a class="nav-link" style="font-size: larger;">46 999 Р</a>
<button class="btn btn-outline-warning" type="submit">Купить</button><a class="p-2"><button class="btn btn-outline-dark" type="submit">Удалить товар</button></a>
</div>
</div>
</div>
</article>
</div>
</main>
<footer class="footer mt-auto d-flex flex-shrink-0 align-items-center">
© 2023 Компания Техник. Администрация Сайта не несет ответственности за размещаемые Пользователями материалы (в т.ч. информацию и изображения), их содержание и качество.
</footer>
</body>
</html>

78
Lab3/dist/Edit.html vendored Normal file
View File

@ -0,0 +1,78 @@
<html lang="ru">
<head>
<meta charset = "utf-8">
<title> Техник </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="module" crossorigin src="/assets/style-61b38a6d.js"></script>
<link rel="stylesheet" href="/assets/style-b8580ced.css">
</head>
<body class="h-100 d-flex flex-column">
<header>
<nav class="navbar navbar-expand-md">
<div class="container-fluid">
<a class = "navbar-brand" href = "./" style="color: #6A3502;">
<i class="fa-solid fa-microchip"></i>
Техник
</a>
<form class="d-flex">
<input class="form-control" type="search" placeholder="Поиск по сайту" aria-label="Search">
<button class="btn btn-outline-*" type="submit" style="color: #6A3502;"><i class="fa-solid fa-search"></i></button>
</form>
</div>
</nav>
</header>
<main class="container-fluid p-2">
<div class="text-center">
<img id="image-preview" src="https://via.placeholder.com/200" class="rounded rounded-circle" alt="placeholder">
</div>
<form id="items-form" class="needs-validation" novalidate>
<div class="mb-2">
<label for="item" class="form-label">Товары</label>
<select id="item" class="form-select" name="selected" required>
<option value="1">Ноутбук</option>
<option value="2">Процессор</option>
<option value="3">Жесткий диск</option>
</select>
</div>
<div class="mb-2">
<label class="form-label" for="price">Цена</label>
<input id="price" name="price" class="form-control" type="number" value="0.00" min="1000.00" step="0.50"
required>
</div>
<div class="mb-2">
<label class="form-label" for="count">Количество</label>
<input id="count" name="count" class="form-control" type="number" value="0" min="1" step="1" required>
</div>
<div class="mb-2">
<label class="form-label" for="image">Изображение</label>
<input id="image" type="file" name="image" class="form-control" accept="image/*">
</div>
<div class="mb-2">
<label class="form-label" for="description">Описание</label>
<input id="description" name="description" class="form-control" type="text" required>
</div>
<div class="mb-2">
<label class="form-label" for="specific">Характеристика</label>
<input id="specific" name="specific" class="form-control" type="text" required>
</div>
<a href="/Profile.html" class="btn btn-secondary">Назад</a>
<button type="submit" class="btn btn-primary">Добавить</button>
</form>
</main>
<footer class="footer mt-auto d-flex flex-shrink-0 align-items-center">
© 2023 Компания Техник. Администрация Сайта не несет ответственности за размещаемые Пользователями материалы (в т.ч. информацию и изображения), их содержание и качество.
</footer>
</body>
</html>

59
Lab3/dist/Login.html vendored Normal file
View File

@ -0,0 +1,59 @@
<html lang="ru">
<head>
<meta charset = "utf-8">
<title> Техник </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="module" crossorigin src="/assets/style-61b38a6d.js"></script>
<link rel="stylesheet" href="/assets/style-b8580ced.css">
</head>
<body class="h-100 d-flex flex-column">
<header>
<nav class="navbar navbar-expand-md">
<div class="container-fluid">
<a class = "navbar-brand" href = "./" style="color: #6A3502;">
<i class="fa-solid fa-microchip"></i>
Техник
</a>
<form class="d-flex">
<input class="form-control" type="search" placeholder="Поиск по сайту" aria-label="Search">
<button class="btn btn-outline-*" type="submit" style="color: #6A3502;"><i class="fa-solid fa-search"></i></button>
</form>
</div>
</nav>
</header>
<main class="container-fluid">
<div class="row justify-content-center">
<form class="col-md-6 m-0" action="./Profile.html" method="get">
<div class="mb-2">
<label class="form-label" for="email">E-mail</label>
<input id="email" name="email" class="form-control" type="email" placeholder="name@example.ru" required>
</div>
<div class="mb-2">
<label class="form-label" for="password">Пароль</label>
<input id="password" name="password" class="form-control" type="password" required>
</div>
<div class="mb-2">
<a class="form-text" href="./Registration.html">Зарегистрироваться</a>
</div>
<div class="text-center">
<button class="btn btn-primary w-50" type="submit" style="background-color: #F4A406;">Войти</button>
</div>
</form>
</div>
</main>
<footer class="footer mt-auto d-flex flex-shrink-0 align-items-center">
© 2023 Компания Техник. Администрация Сайта не несет ответственности за размещаемые Пользователями материалы (в т.ч. информацию и изображения), их содержание и качество.
</footer>
</body>
</html>

110
Lab3/dist/Product.html vendored Normal file
View File

@ -0,0 +1,110 @@
<html lang="ru">
<head>
<meta charset = "utf-8">
<title> Техник </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="module" crossorigin src="/assets/style-61b38a6d.js"></script>
<link rel="stylesheet" href="/assets/style-b8580ced.css">
</head>
<body class="h-100 d-flex flex-column">
<header>
<nav class="navbar navbar-expand-md">
<div class="container-fluid">
<a class = "navbar-brand" href = "./" style="color: #6A3502;">
<i class="fa-solid fa-microchip"></i>
Техник
</a>
<form class="d-flex">
<input class="form-control" type="search" placeholder="Поиск по сайту" aria-label="Search">
<button class="btn btn-outline-*" type="submit" style="color: #6A3502;"><i class="fa-solid fa-search"></i></button>
</form>
<a class="nav-link" href="./Login.html">Вход</a>
</div>
</nav>
</header>
<main class="container-fluid" style="background-color: antiquewhite;">
<h4>15.6" Ноутбук MSI Modern 15 B12M-211RU черный</h4>
<div class="d-flex row">
<article id="carouselExampleIndicators" class="carousel slide p-2 t-2 col-lg-5" data-bs-ride="carousel" style="background-color: white; border-radius: 12px;">
<div class="carousel-indicators">
<button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
<button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="1" aria-label="Slide 2"></button>
<button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="2" aria-label="Slide 3"></button>
</div>
<div class="carousel-inner">
<div class="carousel-item active">
<img src="/assets/Laptop5-1-ccacd5d4.jpg" class="d-block" alt="logo" width="400">
</div>
<div class="carousel-item">
<img src="/assets/Laptop5-2-6cd05c2f.jpg" class="d-block" alt="logo" width="400">
</div>
<div class="carousel-item">
<img src="/assets/Laptop5-3-b3f9b4e9.jpg" class="d-block" alt="logo" width="400">
</div>
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">Previous</span>
</button>
<button class="carousel-control-next" type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</button>
</article>
<article class="d-flex flex-column p-2 col-lg-7">
<div class="p-2">
<div class="navbar-nav d-flex flex-lg-column" style="background-color: white; border-radius: 12px;">
<h5 class="text-center"> 46 999 Р</h5>
<button class="btn btn-warning justify-content-end" type="submit">Купить</button>
</div>
</div>
<div class="navbar-nav p-2">
<div style="background-color: white; border-radius: 12px;">
<h5 class="p-2">Описание</h5>
<a class="nav-link p-2" style="font-size: larger;"> Тонкий корпус ультрабука MSI Modern 15 B12M-215XRU сочетает возможности для оперативного решения сложных задач и оттачивания профессиональных навыков. В качестве ведущего звена производитель выбрал процессор Intel Core i3-1215U с 6-ядерной архитектурой и графический ускоритель Intel UHD Graphics. Это аппаратное оснащение не допускает задержек при обработке файлов и загрузке программ.
Ультрабук MSI Modern 15 B12M-215XRU незаменим для досуга за любимыми развлечениями. Экран диагональю 15.6 дюйма наполняет картинки широким спектром оттенков и не допускает задержек ввода. Матовое покрытие нейтрализует блики от солнечных лучей. Гарантом качественной передачи изображений и звука при проведении совещаний станет веб-камера разрешением 1 Мп и встроенный микрофон.</a>
</div>
</div>
</article>
</div>
<div>
<article class="d-flex flex-column t-2">
<div class="navbar-nav p-2">
<div style="background-color: white; border-radius: 12px;">
<h5 class="p-2">Характеристика</h5>
<a class="nav-link p-2" style="font-size: larger;"> Full HD (1920x1080), IPS, Intel
Core i5-12500H, ядра: 4 + 8 х 2.5 ГГц, RAM 16 ГБ, SSD 512 ГБ, GeForce RTX 4050 для ноутбуков 6 ГБ, без ОС</a>
</div>
</div>
</article>
</div>
<div>
<article class="d-flex flex-column t-2">
<div class="navbar-nav p-2">
<div style="background-color: white; border-radius: 12px;">
<h5 class="p-2">Самый популярный отзыв</h5>
<a class="nav-link p-2" style="font-size: larger;"> <p>markoni89</p> <b>Срок использования:</b> Менее месяца <p><b>Достоинства</b></p><p> отличный процессор 12 поколения, хорош и мощностью и энергопотреблением;</p>
<p><b>Недостатки</b></p><p>сильно маркий пластик корпуса (как и у всей линейки ноутов от MSI), странно что об этом не подумали заранее и вдвойне странно при такой удачной клавиатуре;</p>
<p><b>Комментарий</b></p><p>На данный момент это наилучший вариант для покупки по критерию цена-качество. Железо крайне бодрое, в этой ценовой категории у других производителей нет адекватной конкуренции, даже следующий класс может уступать данному товарищу от MSI.</p></a>
</div>
</div>
</article>
</div>
</main>
<footer class="footer mt-auto d-flex flex-shrink-0 align-items-center">
© 2023 Компания Техник. Администрация Сайта не несет ответственности за размещаемые Пользователями материалы (в т.ч. информацию и изображения), их содержание и качество.
</footer>
</body>
</html>

72
Lab3/dist/Profile.html vendored Normal file
View File

@ -0,0 +1,72 @@
<html lang="ru">
<head>
<meta charset = "utf-8">
<title> Техник </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="module" crossorigin src="/assets/style-61b38a6d.js"></script>
<link rel="stylesheet" href="/assets/style-b8580ced.css">
</head>
<body class="h-100 d-flex flex-column">
<header>
<nav class="navbar navbar-expand-md">
<div class="container-fluid">
<a class = "navbar-brand" href = "./" style="color: #6A3502;">
<i class="fa-solid fa-microchip"></i>
Техник
</a>
<form class="d-flex">
<input class="form-control" type="search" placeholder="Поиск по сайту" aria-label="Search">
<button class="btn btn-outline-*" type="submit" style="color: #6A3502;"><i class="fa-solid fa-search"></i></button>
</form>
<a class="nav-link" href="./Admin.html">Администрация</a>
</div>
</nav>
</header>
<main class="container-fluid" style="background-color: antiquewhite;">
<article class="p-3">
<div class="d-flex flex-lg-row justify-content-center" style="background-color: white; border-radius: 12px;">
<a><img src="/assets/Inoplanet-ff473823.png" class="img-thumbnail" alt="logo" width="200"></a>
<h5 class="p-2">Пришелец-ВА1240</h5>
</div>
</article>
<article class="p-3">
<div class="d-flex flex-lg-row justify-content-center" style="background-color: white; border-radius: 12px;">
<div class="d-flex flex-column p-2">
<h5 class="p-2">Доставляется</h5>
<a class="nav-link p-2" href="#">15.6" Ноутбук GIGABYTE G5 MF черный [Full HD (1920x1080), IPS, Intel
Core i5-12500H, ядра: 4 + 8 х 2.5 ГГц, RAM 16 ГБ, SSD 512 ГБ, GeForce RTX 4050 для ноутбуков 6 ГБ, без ОС] </a>
<h5 class="p-2">Прибудет 29.12.2023</h5>
</div>
<a class="image-container p-2"><img src="/assets/Laptop1-1-caaafcc6.jpg" alt="logo" width="128"></a>
</div>
</article>
<article class="p-3">
<div class="d-flex flex-lg-row justify-content-center" style="background-color: white; border-radius: 12px;">
<div class="d-flex flex-column p-2">
<h5 class="p-2">Завершенные</h5>
<a class="nav-link p-2" href="#">17.3" Ноутбук ARDOR GAMING NEO G17-I7ND307 черный [Full HD (1920x1080), IPS, Intel
Core i7-12650H, ядра: 6 + 4 х 2.3 ГГц, RAM 16 ГБ, SSD 512 ГБ, GeForce
RTX 4060 для ноутбуков 8 ГБ, без ОС] </a>
<h5 class="p-2">Получен 29.02.2023</h5>
</div>
<a class="image-container p-2"><img src="/assets/Laptop4-1-36d8919c.jpg" alt="logo" width="128"></a>
</div>
</article>
</main>
<footer class="footer mt-auto d-flex flex-shrink-0 align-items-center">
© 2023 Компания Техник. Администрация Сайта не несет ответственности за размещаемые Пользователями материалы (в т.ч. информацию и изображения), их содержание и качество.
</footer>
</body>
</html>

83
Lab3/dist/Registration.html vendored Normal file
View File

@ -0,0 +1,83 @@
<html lang="ru">
<head>
<meta charset = "utf-8">
<title> Техник </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="module" crossorigin src="/assets/style-61b38a6d.js"></script>
<link rel="stylesheet" href="/assets/style-b8580ced.css">
</head>
<body class="h-100 d-flex flex-column">
<header>
<nav class="navbar navbar-expand-md">
<div class="container-fluid">
<a class = "navbar-brand" href = "./" style="color: #6A3502;">
<i class="fa-solid fa-microchip"></i>
Техник
</a>
<form class="d-flex">
<input class="form-control" type="search" placeholder="Поиск по сайту" aria-label="Search">
<button class="btn btn-outline-*" type="submit" style="color: #6A3502;"><i class="fa-solid fa-search"></i></button>
</form>
<a class="nav-link" href="./Login.html">Вход</a>
</div>
</nav>
</header>
<main class="container-fluid">
<div class="row justify-content-center">
<form class="col-md-6 m-0" action="./Profile.html" method="get">
<div class="mb-2">
<label class="form-label" for="lastname">Фамилия*</label>
<input id="lastname" name="lastname" class="form-control" type="text" required>
</div>
<div class="mb-2">
<label class="form-label" for="firstname">Имя*</label>
<input id="firstname" name="firstname" class="form-control" type="text" required>
</div>
<div class="mb-2">
<label class="form-label" for="date">Дата рождения</label>
<input id="date" name="date" class="form-control" type="date">
</div>
<div class="mb-2">
<label class="form-label" for="email">E-mail*</label>
<input id="email" name="email" class="form-control" type="email" placeholder="name@example.ru" required>
</div>
<div class="mb-2">
<label class="form-label" for="password">Пароль*</label>
<input id="password" name="password" class="form-control" type="password" required>
</div>
<div class="mb-2 d-md-flex flex-md-row">
<div class="form-check me-md-3">
<input class="form-check-input" id="checkbox1" name="checkbox1" type="checkbox">
<label class="form-check-label" for="checkbox1">Получать акционные предложения по почте</label>
</div>
<div class="form-check">
<input class="form-check-input" id="checkbox2" name="checkbox2" type="checkbox" required>
<label class="form-check-label" for="checkbox2">Соглашение об обработке персональных данных*</label>
</div>
</div>
<div class="mb-2">
<a class="form-text">* - поле обязательное для заполнения</a>
</div>
<div class="text-center">
<button class="btn btn-primary w-50" type="submit" style="background-color: #F4A406;">Зарегистрироваться</button>
</div>
</form>
</div>
</main>
<footer class="footer mt-auto d-flex flex-shrink-0 align-items-center">
© 2023 Компания Техник. Администрация Сайта не несет ответственности за размещаемые Пользователями материалы (в т.ч. информацию и изображения), их содержание и качество.
</footer>
</body>
</html>

BIN
Lab3/dist/assets/Blog1-3ccce144.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
Lab3/dist/assets/Blog2-9cc7964d.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 KiB

BIN
Lab3/dist/assets/Blog3-626d14af.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
Lab3/dist/assets/Blog4-430a22c6.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
Lab3/dist/assets/Inoplanet-ff473823.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

BIN
Lab3/dist/assets/Laptop1-1-caaafcc6.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

BIN
Lab3/dist/assets/Laptop2-1-7a4e5c4a.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

BIN
Lab3/dist/assets/Laptop3-1-6a66d335.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
Lab3/dist/assets/Laptop4-1-36d8919c.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

BIN
Lab3/dist/assets/Laptop5-1-ccacd5d4.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
Lab3/dist/assets/Laptop5-2-6cd05c2f.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
Lab3/dist/assets/Laptop5-3-b3f9b4e9.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

BIN
Lab3/dist/assets/News1-1cf0564f.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
Lab3/dist/assets/News2-fcc14489.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
Lab3/dist/assets/News3-412347bf.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

BIN
Lab3/dist/assets/News4-444270a1.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

1
Lab3/dist/assets/main-ccc0ec05.js.map vendored Normal file
View File

@ -0,0 +1 @@
{"version":3,"file":"main-ccc0ec05.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}

View File

@ -0,0 +1 @@
{"version":3,"file":"page2-ccc0ec05.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}

View File

@ -0,0 +1 @@
{"version":3,"file":"page3-ccc0ec05.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}

View File

@ -0,0 +1 @@
{"version":3,"file":"page4-ccc0ec05.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}

View File

@ -0,0 +1 @@
{"version":3,"file":"page5-ccc0ec05.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}

View File

@ -0,0 +1 @@
{"version":3,"file":"page6-ccc0ec05.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}

6
Lab3/dist/assets/page7-a02d5850.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":3,"file":"page8-ccc0ec05.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}

6
Lab3/dist/assets/style-61b38a6d.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

9
Lab3/dist/assets/style-b8580ced.css vendored Normal file

File diff suppressed because one or more lines are too long

143
Lab3/dist/index.html vendored Normal file
View File

@ -0,0 +1,143 @@
<html lang="ru">
<head>
<meta charset = "utf-8">
<title> Техник </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="module" crossorigin src="/assets/style-61b38a6d.js"></script>
<link rel="stylesheet" href="/assets/style-b8580ced.css">
</head>
<body class="h-100 d-flex flex-column">
<header>
<nav class="navbar navbar-expand-md">
<div class="container-fluid">
<a class = "navbar-brand" href = "./" style="color: #6A3502;">
<i class="fa-solid fa-microchip"></i>
Техник
</a>
<form class="d-flex">
<input class="form-control" type="search" placeholder="Поиск по сайту" aria-label="Search">
<button class="btn btn-outline-*" type="submit" style="color: #6A3502;"><i class="fa-solid fa-search"></i></button>
</form>
<a class="nav-link" href="./Login.html">Вход</a>
</div>
</nav>
</header>
<main class="container-fluid" style="background-color: antiquewhite;">
<div class="row">
<article class="col-lg-3">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCatalog"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<h3>Каталог</h3>
</button>
<div class="navbar-collapse collapse" id="navbarCatalog">
<div class="navbar-nav" style="background-color: white; border-radius: 12px;">
<li class="nav-item">
<a class="nav-link p-2" href="#"> Бытовая техника</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="#"> Красота и здоровье</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="#"> Смартфоны и фототехника</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="#"> ТВ, консоли и аудио</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="./Catalog.html"> ПК, ноутбуки, периферия</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="#"> Комплектующие для ПК</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="#"> Офис и мебель</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="#"> Сетевое оборудование</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="#"> Отдых и развлечения</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="#"> Инструмент и стройка</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="#"> Садовая техника</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="#"> Дом, декор и посуда</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="#"> Автотовары</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="#"> Аксессуары и услуги</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="#"> Распродажа</a>
</li>
</div>
</div>
</article>
<article class="col-lg-9">
<div class="p-2">
<div class="p-2" style="background-color: white; border-radius: 12px;">
<h2>Новости</h2>
<section class="row">
<article class="col-lg-4">
<a class="text-image" href="#"><img src="/assets/News1-1cf0564f.jpg" class="img-thumbnail">Скидка 10% на комплект КБТ</a>
</article>
<article class="col-lg-4">
<a class="text-image" href="#"><img src="/assets/News2-fcc14489.jpg" class="img-thumbnail">Новинка! Электрическая кофемолка Reoka RKCG-P1</a>
</article>
<article class="col-lg-4">
<a class="text-image" href="#"><img src="/assets/News3-412347bf.jpg" class="img-thumbnail">Новинка! Мультистайлер Dyson Airwrap Styler Complete Long Lite HS05</a>
</article>
<article class="col-lg-4">
<a class="text-image" href="#"><img src="/assets/News4-444270a1.jpg" class="img-thumbnail">Новинка! Ноутбук Xiaomi Book 14</a>
</article>
</section>
</div>
</div>
<div class="p-2">
<div class="p-2" style="background-color: white; border-radius: 12px;">
<h2>Блоги</h2>
<section class="row">
<article class="col-lg-4">
<a class="text-image" href="#"><img src="/assets/Blog1-3ccce144.jpg" class="img-thumbnail">Как выбрать осушитель воздуха</a>
</article>
<article class="col-lg-4">
<a class="text-image" href="#"><img src="/assets/Blog2-9cc7964d.png" class="img-thumbnail">Как настроить графику в Alan Wake 2</a>
</article>
<article class="col-lg-4">
<a class="text-image" href="#"><img src="/assets/Blog3-626d14af.png" class="img-thumbnail">Лучшие плагины для браузеров</a>
</article>
<article class="col-lg-4">
<a class="text-image" href="#"><img src="/assets/Blog4-430a22c6.jpg" class="img-thumbnail">Самые ожидаемые игры - ноябрь 2023 года</a>
</article>
</section>
</div>
</div>
</article>
</div>
</main>
<footer class="footer mt-auto d-flex flex-shrink-0 align-items-center">
© 2023 Компания Техник. Администрация Сайта не несет ответственности за размещаемые Пользователями материалы (в т.ч. информацию и изображения), их содержание и качество.
</footer>
</body>
</html>

140
Lab3/index.html Normal file
View File

@ -0,0 +1,140 @@
<html lang="ru">
<head>
<meta charset = "utf-8">
<title> Техник </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="module" src="./node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
<link href="./node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"/>
<link href="./node_modules/@fortawesome/fontawesome-free/css/all.min.css" rel="stylesheet"/>
<link rel = "stylesheet" href = "./style.css">
</head>
<body class="h-100 d-flex flex-column">
<header>
<nav class="navbar navbar-expand-md">
<div class="container-fluid">
<a class = "navbar-brand" href = "./" style="color: #6A3502;">
<i class="fa-solid fa-microchip"></i>
Техник
</a>
<form class="d-flex">
<input class="form-control" type="search" placeholder="Поиск по сайту" aria-label="Search">
<button class="btn btn-outline-*" type="submit" style="color: #6A3502;"><i class="fa-solid fa-search"></i></button>
</form>
<a class="nav-link" href="./Login.html">Вход</a>
</div>
</nav>
</header>
<main class="container-fluid" style="background-color: antiquewhite;">
<div class="row">
<article class="col-lg-3">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCatalog"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<h3>Каталог</h3>
</button>
<div class="navbar-collapse collapse" id="navbarCatalog">
<div class="navbar-nav" style="background-color: white; border-radius: 12px;">
<li class="nav-item">
<a class="nav-link p-2" href="./Catalog.html?id=1"> Бытовая техника</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="./Catalog.html?id=2"> Красота и здоровье</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="./Catalog.html?id=3"> Смартфоны и фототехника</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="./Catalog.html?id=4"> ТВ, консоли и аудио</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="./Catalog.html?id=5"> ПК, ноутбуки, периферия</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="./Catalog.html?id=6"> Комплектующие для ПК</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="./Catalog.html?id=7"> Офис и мебель</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="./Catalog.html?id=8"> Сетевое оборудование</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="./Catalog.html?id=9"> Отдых и развлечения</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="./Catalog.html?id=10"> Инструмент и стройка</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="./Catalog.html?id=11"> Садовая техника</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="./Catalog.html?id=12"> Дом, декор и посуда</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="./Catalog.html?id=13"> Автотовары</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="./Catalog.html?id=14"> Аксессуары и услуги</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="./Catalog.html?id=15"> Распродажа</a>
</li>
</div>
</div>
</article>
<article class="col-lg-9">
<div class="p-2">
<div class="p-2" style="background-color: white; border-radius: 12px;">
<h2>Новости</h2>
<section class="row">
<article class="col-lg-4">
<a class="text-image" href="#"><img src="Image/News1.jpg" class="img-thumbnail">Скидка 10% на комплект КБТ</a>
</article>
<article class="col-lg-4">
<a class="text-image" href="#"><img src="Image/News2.jpg" class="img-thumbnail">Новинка! Электрическая кофемолка Reoka RKCG-P1</a>
</article>
<article class="col-lg-4">
<a class="text-image" href="#"><img src="Image/News3.jpg" class="img-thumbnail">Новинка! Мультистайлер Dyson Airwrap Styler Complete Long Lite HS05</a>
</article>
<article class="col-lg-4">
<a class="text-image" href="#"><img src="Image/News4.jpg" class="img-thumbnail">Новинка! Ноутбук Xiaomi Book 14</a>
</article>
</section>
</div>
</div>
<div class="p-2">
<div class="p-2" style="background-color: white; border-radius: 12px;">
<h2>Блоги</h2>
<section class="row">
<article class="col-lg-4">
<a class="text-image" href="#"><img src="Image/Blog1.jpg" class="img-thumbnail">Как выбрать осушитель воздуха</a>
</article>
<article class="col-lg-4">
<a class="text-image" href="#"><img src="Image/Blog2.png" class="img-thumbnail">Как настроить графику в Alan Wake 2</a>
</article>
<article class="col-lg-4">
<a class="text-image" href="#"><img src="Image/Blog3.png" class="img-thumbnail">Лучшие плагины для браузеров</a>
</article>
<article class="col-lg-4">
<a class="text-image" href="#"><img src="Image/Blog4.jpg" class="img-thumbnail">Самые ожидаемые игры - ноябрь 2023 года</a>
</article>
</section>
</div>
</div>
</article>
</div>
</main>
<footer class="footer mt-auto d-flex flex-shrink-0 align-items-center">
© 2023 Компания Техник. Администрация Сайта не несет ответственности за размещаемые Пользователями материалы (в т.ч. информацию и изображения), их содержание и качество.
</footer>
</body>
</html>

66
Lab3/js/lines-modal.js Normal file
View File

@ -0,0 +1,66 @@
// Модуль для работы с модальным окном
// импорт компонента Modal из bootstrap
import { Modal } from "bootstrap";
import { cntrls, imagePlaceholder } from "./lines-ui";
// поиск модального окна на странице
const modal = document.getElementById("items-update");
// если он найден, то создается экземпляр компонента Modal
// для программного управления модальным окном
const myModal = modal ? new Modal(modal, {}) : null;
// поиск тега с заголовком модального кона для его смены
const modalTitle = document.getElementById("items-update-title");
// обнуление значений модального окна, т. к.
// используется одно окно для всех операций
function resetValues() {
cntrls.lineId.value = "";
cntrls.productType.value = "";
cntrls.itemsType.value = "";
cntrls.model.value = "";
cntrls.image.value = "";
cntrls.imagePreview.src = imagePlaceholder;
cntrls.price.value = parseFloat(0).toFixed(2);
cntrls.count.value = 0;
cntrls.description.value = "";
cntrls.specific.value = "";
}
// функция для показа модального окна
// перед показом происходит заполнение формы для редактирования
// если объект item не пуст
export function showUpdateModal(item) {
modalTitle.innerHTML = item === null ? "Добавить" : "Изменить";
console.info(item);
if (item) {
cntrls.lineId.value = item.id;
cntrls.productType.value = item.productId;
cntrls.itemsType.value = item.itemsId;
cntrls.model.value = item.model;
// заполнение превью
// Если пользователь выбрал изображение, то оно загружается
// в тэг image с id image - preview
// иначе устанавливается заглушка, адрес которой указан в imagePlaceholder
cntrls.imagePreview.src = item.image ? item.image : imagePlaceholder;
cntrls.price.value = item.price;
cntrls.count.value = item.count;
cntrls.description.value = item.description;
cntrls.specific.value = item.specific;
} else {
resetValues();
}
myModal.show();
}
// функция для скрытия модального окна
export function hideUpdateModal() {
resetValues();
// удаление класса was-validated для скрытия результатов валидации
cntrls.form.classList.remove("was-validated");
myModal.hide();
}

122
Lab3/js/lines-rest-api.js Normal file
View File

@ -0,0 +1,122 @@
// модуль для работы с REST API сервера
// адрес сервера
const serverUrl = "http://localhost:8081";
// функция возвращает объект нужной структуры для отправки на сервер
function createLineObject(product, item, model, image, price, count, description, specific) {
return {
productId: product,
itemsId: item,
model,
image,
price: parseFloat(price).toFixed(2),
count,
sum: parseFloat(price * count).toFixed(2),
description,
specific,
};
}
// обращение к серверу для получения всех типов товара (get)
export async function getAllItemTypes() {
const response = await fetch(`${serverUrl}/items`);
if (!response.ok) {
throw response.statusText;
}
return response.json();
}
export async function getAllProductTypes() {
const response = await fetch(`${serverUrl}/product`);
if (!response.ok) {
throw response.statusText;
}
return response.json();
}
// обращение к серверу для получения всех записей (get)
export async function getAllLines() {
const response = await fetch(`${serverUrl}/lines?_expand=items`);
if (!response.ok) {
throw response.statusText;
}
return response.json();
}
export async function getCatalogLines(id) {
const response = await fetch(`${serverUrl}/lines?itemsId=${id}`);
if (!response.ok) {
throw response.statusText;
}
return response.json();
}
// обращение к серверу для получения записи по первичному ключу (id) (get)
// id передается в качестве части пути URL get-запроса
export async function getLine(id) {
const response = await fetch(`${serverUrl}/lines/${id}?_expand=items`);
if (!response.ok) {
throw response.statusText;
}
return response.json();
}
// обращение к серверу для создания записи (post)
// объект отправляется в теле запроса (body)
export async function createLine(product, item, model, image, price, count, description, specific) {
// eslint-disable-next-line max-len
const itemObject = createLineObject(product, item, model, image, price, count, description, specific);
const options = {
method: "POST",
body: JSON.stringify(itemObject),
headers: {
"Accept": "application/json",
"Content-Type": "application/json",
},
};
const response = await fetch(`${serverUrl}/lines`, options);
if (!response.ok) {
throw response.statusText;
}
return response.json();
}
// обращение к серверу для обновления записи по id (put)
// объект отправляется в теле запроса (body)
// id передается в качестве части пути URL get-запроса
// eslint-disable-next-line max-len
export async function updateLine(id, product, item, model, image, price, count, description, specific) {
// eslint-disable-next-line max-len
const itemObject = createLineObject(product, item, model, image, price, count, description, specific);
const options = {
method: "PUT",
body: JSON.stringify(itemObject),
headers: {
"Accept": "application/json",
"Content-Type": "application/json",
},
};
const response = await fetch(`${serverUrl}/lines/${id}`, options);
if (!response.ok) {
throw response.statusText;
}
return response.json();
}
// обращение к серверу для удаления записи по id (delete)
// id передается в качестве части пути URL get-запроса
export async function deleteLine(id) {
const options = {
method: "DELETE",
};
const response = await fetch(`${serverUrl}/lines/${id}`, options);
if (!response.ok) {
throw response.statusText;
}
return response.json();
}

123
Lab3/js/lines-ui.js Normal file
View File

@ -0,0 +1,123 @@
// модуль для работы с элементами управления
// объект для удобного получения элементов
// при обращении к атрибуту объекта вызывается
// нужная функция для поиска элемента
export const cntrls = {
button: document.getElementById("items-add"),
table: document.querySelector("#items-table tbody"),
form: document.getElementById("items-form"),
lineId: document.getElementById("items-line-id"),
productType: document.getElementById("product"),
itemsType: document.getElementById("item"),
model: document.getElementById("model"),
price: document.getElementById("price"),
count: document.getElementById("count"),
description: document.getElementById("description"),
specific: document.getElementById("specific"),
image: document.getElementById("image"),
imagePreview: document.getElementById("image-preview"),
catalogConteiner: document.getElementById("items-catalog"),
};
// Дефолтное превью
export const imagePlaceholder = "https://via.placeholder.com/200";
// функция создает тег option для select
// <option value="" selected>name</option>
export function createItemsOption(name, value = "", isSelected = false) {
const option = document.createElement("option");
option.value = value || "";
option.selected = isSelected;
option.text = name;
return option;
}
export function createProductOption(name, value = "", isSelected = false) {
const option = document.createElement("option");
option.value = value || "";
option.selected = isSelected;
option.text = name;
return option;
}
// функция создает ссылку (a) для таблицы
// содержимое тега a заполняется необходимой иконкой (icon)
// при нажатии вызывается callback
// ссылка "оборачивается" тегом td
// <td><a href="#" onclick="callback()"><i class="fa-solid icon"></i></a></td>
function createTableAnchor(icon, callback) {
const i = document.createElement("i");
i.classList.add("fa-solid", icon);
const a = document.createElement("a");
a.href = "#";
a.appendChild(i);
a.onclick = (event) => {
// чтобы в URL не добавлялась решетка
event.preventDefault();
event.stopPropagation();
callback();
};
const td = document.createElement("td");
td.appendChild(a);
return td;
}
// функция создает колонку таблицы с текстом value
// <td>value</td>
function createTableColumn(value) {
const td = document.createElement("td");
td.textContent = value;
return td;
}
export function createCatalogItem(item) {
const imageUrl = item.image ? item.image : 'https://via.placeholder.com/200';
const catalogHtml = `
<div class="p-2 t-2">
<div class="navbar-nav d-flex flex-lg-row p-2 t-2" style="background-color: white; border-radius: 12px;">
<a class="image-container col-lg-2"><img id="image-preview" src="${imageUrl}" class="d-block" alt="logo" width="128"></a>
<a class="nav-link col-lg-8" href="./Product.html?id=${item.id}">${item.model} ${item.specific}</a>
<div class="nav-link d-flex flex-column col-lg-2">
<a class="nav-link" style="font-size: larger;">${item.price}</a>
<button class="btn btn-outline-warning" type="submit">Купить</button>
</div>
</div>
</div>
`;
return catalogHtml;
}
// функция создает строку таблицы
// <tr>
// <th scope="row">index + 1</th>
// <td>item.items.name</td>
// <td>parseFloat(item.price).toFixed(2))</td>
// <td>item.count</td>
// <td>parseFloat(item.sum).toFixed(2))</td>
// <td><a href="#" onclick="editCallback()"><i class="fa-solid fa-pencil"></i></a></td>
// <td><a href="#" onclick="editPageCallback()"><i class="fa-solid fa-pen-to-square"></i></a></td>
// <td><a href="#" onclick="deleteCallback()"><i class="fa-solid fa-trash"></i></a></td>
// </tr>
export function createTableRow(item, index, editCallback, deleteCallback) {
const rowNumber = document.createElement("th");
rowNumber.scope = "row";
rowNumber.textContent = index + 1;
const row = document.createElement("tr");
row.id = `line-${item.id}`;
row.appendChild(rowNumber);
row.appendChild(createTableColumn(item.items.name));
row.appendChild(createTableColumn(item.model));
row.appendChild(createTableColumn(parseFloat(item.price).toFixed(2)));
row.appendChild(createTableColumn(item.count));
row.appendChild(createTableColumn(parseFloat(item.sum).toFixed(2)));
// редактировать в модальном окне
row.appendChild(createTableAnchor("fa-pencil", editCallback));
// удаление
row.appendChild(createTableAnchor("fa-trash", deleteCallback));
return row;
}

277
Lab3/js/lines.js Normal file
View File

@ -0,0 +1,277 @@
// модуль с логикой
import { hideUpdateModal, showUpdateModal } from "./lines-modal";
import {
createLine, deleteLine, getAllItemTypes, getAllLines, updateLine, getAllProductTypes, getLine, getCatalogLines,
} from "./lines-rest-api";
import {
// eslint-disable-next-line max-len
cntrls, createItemsOption, createTableRow, imagePlaceholder, createProductOption, createCatalogItem,
} from "./lines-ui";
async function drawItemsSelect() {
// вызов метода REST API для получения списка типов товаров
const data = await getAllItemTypes();
// очистка содержимого select
// удаляется все, что находится между тегами <select></select>
// но не атрибуты
cntrls.itemsType.innerHTML = "";
// пустое значение
cntrls.itemsType.appendChild(createItemsOption("Выберите значение", "", true));
// цикл по результату ответа от сервера
// используется лямбда-выражение
// (item) => {} аналогично function(item) {}
data.forEach((item) => {
cntrls.itemsType.appendChild(createItemsOption(item.name, item.id));
});
}
async function drawProductSelect() {
// вызов метода REST API для получения списка типов товаров
const data = await getAllProductTypes();
// очистка содержимого select
// удаляется все, что находится между тегами <select></select>
// но не атрибуты
cntrls.productType.innerHTML = "";
// пустое значение
cntrls.productType.appendChild(createProductOption("Выберите значение", "", true));
// цикл по результату ответа от сервера
// используется лямбда-выражение
// (item) => {} аналогично function(item) {}
data.forEach((item) => {
cntrls.productType.appendChild(createProductOption(item.name, item.id));
});
}
async function drawLinesTable() {
console.info("Try to load data");
if (!cntrls.table) {
return;
}
// вызов метода REST API для получения всех записей
const data = await getAllLines();
// очистка содержимого table
// удаляется все, что находится между тегами <table></table>
// но не атрибуты
cntrls.table.innerHTML = "";
// цикл по результату ответа от сервера
// используется лямбда-выражение
// (item, index) => {} аналогично function(item, index) {}
data.forEach((item, index) => {
cntrls.table.appendChild(
createTableRow(
item,
index,
// функции передаются в качестве параметра
// это очень удобно, так как аргументы функций доступны только
// в данном месте кода и не передаются в сервисные модули
() => showUpdateModal(item),
() => removeLine(item.id),
),
);
});
}
async function drawCatalog(id) {
console.info("Try to load data");
// вызов метода REST API для получения всех записей
const data = await getCatalogLines(id);
// цикл по результату ответа от сервера
// используется лямбда-выражение
// (item, index) => {} аналогично function(item, index) {}
data.forEach((item) => {
const catalogItem = createCatalogItem({
image: item.image,
model: item.model,
price: item.price,
specific: item.specific,
id: item.id,
});
cntrls.catalogConteiner.innerHTML += catalogItem;
});
}
async function addLine(product, item, model, image, price, count, description, specific) {
console.info("Try to add item");
// вызов метода REST API для добавления записи
const data = await createLine(product, item, model, image, price, count, description, specific);
console.info("Added");
console.info(data);
// загрузка и заполнение table
drawLinesTable();
}
async function editLine(id, product, item, model, image, price, count, description, specific) {
console.info("Try to update item");
// вызов метода REST API для обновления записи
// eslint-disable-next-line max-len
const data = await updateLine(id, product, item, model, image, price, count, description, specific);
console.info("Updated");
console.info(data);
// загрузка и заполнение table
drawLinesTable();
}
async function removeLine(id) {
if (!confirm("Do you really want to remove this item?")) {
console.info("Canceled");
return;
}
console.info("Try to remove item");
// вызов метода REST API для удаления записи
const data = await deleteLine(id);
console.info(data);
// загрузка и заполнение table
drawLinesTable();
}
// функция для получения содержимого файла в виде base64 строки
// https://ru.wikipedia.org/wiki/Base64
async function readFile(file) {
const reader = new FileReader();
// создание Promise-объекта для использования функции
// с помощью await (асинхронно) без коллбэков (callback)
// https://learn.javascript.ru/promise
return new Promise((resolve, reject) => {
// 2. "Возвращаем" содержимое когда файл прочитан
// через вызов resolve
// Если не использовать Promise, то всю работу по взаимодействию
// с REST API пришлось бы делать в обработчике (callback) функции
// onloadend
reader.onloadend = () => {
const fileContent = reader.result;
// Здесь могла бы быть работа с REST API
// Чтение заканчивает выполняться здесь
resolve(fileContent);
};
// 3. Возвращаем ошибку
reader.onerror = () => {
// Или здесь в случае ошибки
reject(new Error("oops, something went wrong with the file reader."));
};
// Шаг 1. Сначала читаем файл
// Чтение начинает выполняться здесь
reader.readAsDataURL(file);
});
}
// функция для обновления блока с превью выбранного изображения
async function updateImagePreview() {
// получение выбранного файла
// возможен выбор нескольких файлов, поэтому необходимо получить только первый
const file = cntrls.image.files[0];
// чтение содержимого файла в виде base64 строки
const fileContent = await readFile(file);
console.info("base64 ", fileContent);
// обновление атрибута src для тега img с id image-preview
cntrls.imagePreview.src = fileContent;
}
// Функция для обработки создания и редактирования элементов таблицы через модальное окно
// Если хотите делать через страницу, то удалите эту функцию
export function linesForm() {
console.info("linesForm");
// загрузка и заполнение select со списком товаров
drawItemsSelect();
drawProductSelect();
// загрузка и заполнение table
drawLinesTable();
// Вызов функции обновления превью изображения при возникновении
// события oncahnge в тэге input с id image
cntrls.image.addEventListener("change", () => updateImagePreview());
// обработчик события нажатия на кнопку для показа модального окна
cntrls.button.addEventListener("click", () => showUpdateModal(null));
// обработчик события отправки формы
// возникает при нажатии на кнопку (button) с типом submit
// кнопка должна находится внутри тега form
cntrls.form.addEventListener("submit", async (event) => {
console.info("Form onSubmit");
// отключение стандартного поведения формы при отправке
// при отправке страница обновляется и JS перестает работать
event.preventDefault();
event.stopPropagation();
// если форма не прошла валидацию, то ничего делать не нужно
if (!cntrls.form.checkValidity()) {
return;
}
let imageBase64 = "";
// Получение выбранного пользователем изображения в виде base64 строки
// Если пользователь ничего не выбрал, то не нужно сохранять в БД
// дефолтное изображение
if (cntrls.imagePreview.src !== imagePlaceholder) {
// Загрузка содержимого атрибута src тэга img с id image-preview
// Здесь выполняется HTTP запрос с типом GET
const result = await fetch(cntrls.imagePreview.src);
// Получение из HTTP-ответа бинарного содержимого
const blob = await result.blob();
// Получение base64 строки для файла
// Здесь выполняется Promise из функции readFile
// Promise позволяет писать линейный код для работы с асинхронными методами
// без использования обработчиков (callback) с помощью await
imageBase64 = await readFile(blob);
}
// получение id строки для редактирования
// это значение содержится в скрытом input
const currentId = cntrls.lineId.value;
// если значение id не задано,
// то необходимо выполнить добавление записи
// иначе обновление записи
if (!currentId) {
await addLine(
cntrls.productType.value,
cntrls.itemsType.value,
cntrls.model.value,
imageBase64,
cntrls.price.value,
cntrls.count.value,
cntrls.description.value,
cntrls.specific.value,
);
} else {
await editLine(
currentId,
cntrls.productType.value,
cntrls.itemsType.value,
cntrls.model.value,
imageBase64,
cntrls.price.value,
cntrls.count.value,
cntrls.description.value,
cntrls.specific.value,
);
}
// после выполнения добавления/обновления модальное окно скрывается
hideUpdateModal();
});
}
export async function linesPageForm(id) {
console.info("linesPageForm");
drawCatalog(id);
}
export async function productPage() {
console.info("productPage");
// получение параметров GET-запроса из URL
// параметры перечислены после символа ? (?id=1&color=black&...)
const urlParams = new URLSearchParams(location.search);
// получение значения конкретного параметра (id)
// указан только при редактировании
const currentId = urlParams.get("id")
const item = await getLine(currentId);
cntrls.imagePreview.src = item.image ? item.image : imagePlaceholder;
cntrls.model.innerText = item.model;
cntrls.price.innerText = item.price;
cntrls.description.innerText = item.description;
cntrls.specific.innerText = item.specific;
}

25
Lab3/js/validation.js Normal file
View File

@ -0,0 +1,25 @@
// модуль используется для валидации форма на странице
function validation() {
// поиск всех форма с классом .needs-validation
const forms = document.querySelectorAll("form.needs-validation");
for (let i = 0; i < forms.length; i += 1) {
const form = forms[i];
// для каждой формы добавляется обработчик события отправки
form.addEventListener("submit", (event) => {
// если форма не прошла валидацию
// то выключить стандартное действие
if (!form.checkValidity()) {
event.preventDefault();
// предотвращает распространение preventDefault
// на другие объекты
event.stopPropagation();
}
// добавляет к форме класс was-validated
form.classList.add("was-validated");
});
}
}
export default validation;

14
Lab3/jsconfig.json Normal file
View File

@ -0,0 +1,14 @@
{
"compilerOptions": {
"module": "ESNext",
"moduleResolution": "Node",
"target": "ES2020",
"jsx": "preserve",
"strictNullChecks": true,
"strictFunctionTypes": true
},
"exclude": [
"node_modules",
"**/node_modules/*"
]
}

12
Lab3/node_modules/.bin/acorn generated vendored Normal file
View File

@ -0,0 +1,12 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../acorn/bin/acorn" "$@"
else
exec node "$basedir/../acorn/bin/acorn" "$@"
fi

17
Lab3/node_modules/.bin/acorn.cmd generated vendored Normal file
View 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
Lab3/node_modules/.bin/acorn.ps1 generated vendored Normal file
View 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

12
Lab3/node_modules/.bin/esbuild generated vendored Normal file
View File

@ -0,0 +1,12 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../esbuild/bin/esbuild" "$@"
else
exec node "$basedir/../esbuild/bin/esbuild" "$@"
fi

17
Lab3/node_modules/.bin/esbuild.cmd generated vendored Normal file
View 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
Lab3/node_modules/.bin/esbuild.ps1 generated vendored Normal file
View 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

12
Lab3/node_modules/.bin/eslint generated vendored Normal file
View File

@ -0,0 +1,12 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../eslint/bin/eslint.js" "$@"
else
exec node "$basedir/../eslint/bin/eslint.js" "$@"
fi

17
Lab3/node_modules/.bin/eslint.cmd generated vendored Normal file
View 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
Lab3/node_modules/.bin/eslint.ps1 generated vendored Normal file
View 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

12
Lab3/node_modules/.bin/he generated vendored Normal file
View File

@ -0,0 +1,12 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../he/bin/he" "$@"
else
exec node "$basedir/../he/bin/he" "$@"
fi

17
Lab3/node_modules/.bin/he.cmd generated vendored Normal file
View 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
Lab3/node_modules/.bin/he.ps1 generated vendored Normal file
View 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

12
Lab3/node_modules/.bin/http-server generated vendored Normal file
View File

@ -0,0 +1,12 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
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
Lab3/node_modules/.bin/http-server.cmd generated vendored Normal file
View 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
Lab3/node_modules/.bin/http-server.ps1 generated vendored Normal file
View 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

12
Lab3/node_modules/.bin/js-yaml generated vendored Normal file
View File

@ -0,0 +1,12 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
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
Lab3/node_modules/.bin/js-yaml.cmd generated vendored Normal file
View 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
Lab3/node_modules/.bin/js-yaml.ps1 generated vendored Normal file
View 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

Some files were not shown because too many files have changed in this diff Show More