Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
140 changes: 78 additions & 62 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,69 +1,85 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<head>
<meta charset="UTF-8"/>
<title>Заказ кофе</title>
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<form>
<fieldset class="beverage">
<h4 class="beverage-count">Напиток №1</h4>
<label class="field">
<span class="label-text">Я буду</span>
<select>
<option value="espresso">Эспрессо</option>
<option value="capuccino" selected>Капучино</option>
<option value="cacao">Какао</option>
</select>
</label>
<div class="field">
<span class="checkbox-label">Сделайте напиток на</span>
<label class="checkbox-field">
<input type="radio" name="milk" value="usual" checked />
<span>обычном молоке</span>
</label>
<label class="checkbox-field">
<input type="radio" name="milk" value="no-fat" />
<span>обезжиренном молоке</span>
</label>
<label class="checkbox-field">
<input type="radio" name="milk" value="soy" />
<span>соевом молоке</span>
</label>
<label class="checkbox-field">
<input type="radio" name="milk" value="coconut" />
<span>кокосовом молоке</span>
</label>
<link rel="stylesheet" href="styles.css"/>
</head>
<body>
<div class="hidden">
<div class="lightbox">
<div class="lightbox-head">
<div class="countOfCoffee">Заказ принят!</div>
<button class="close lightboxClose" onclick="document.querySelector('.hidden').style.display='none';">x
</button>
</div>
<div class="field">
<span class="checkbox-label">Добавьте к напитку:</span>
<label class="checkbox-field">
<input type="checkbox" name="options" value="whipped cream" />
<span>взбитых сливок</span>
</label>
<label class="checkbox-field">
<input type="checkbox" name="options" value="marshmallow" />
<span>зефирок</span>
</label>
<label class="checkbox-field">
<input type="checkbox" name="options" value="chocolate" />
<span>шоколад</span>
</label>
<label class="checkbox-field">
<input type="checkbox" name="options" value="cinnamon" />
<span>корицу</span>
</label>
</div>
</fieldset>
<div>
<button type="button" class="add-button">+ Добавить напиток</button>
</div>
<div style="margin-top: 30px">
<button type="submit" class="submit-button">Готово</button>
</div>
<table></table>
<form class="lightbox-form">
<div><input type="submit"></div>
</form>
</div>
</div>
<div class="beverages">
<form id="form1" class="beverage-form">
<fieldset class="beverage">
<h4 class="beverage-count">Напиток №1</h4>
<button class="close" onclick="deleteCoffee(this.parentNode.parentNode)">X</button>
<label class="field">
<span class="label-text">Я буду</span>
<select name="type">
<option value="espresso">Эспрессо</option>
<option value="capuccino" selected>Капучино</option>
<option value="cacao">Какао</option>
</select>
</label>
<div class="field">
<span class="checkbox-label">Сделайте напиток на</span>
<label class="checkbox-field">
<input type="radio" name="milk" value="usual" checked/>
<span>обычном молоке</span>
</label>
<label class="checkbox-field">
<input type="radio" name="milk" value="no-fat"/>
<span>обезжиренном молоке</span>
</label>
<label class="checkbox-field">
<input type="radio" name="milk" value="soy"/>
<span>соевом молоке</span>
</label>
<label class="checkbox-field">
<input type="radio" name="milk" value="coconut"/>
<span>кокосовом молоке</span>
</label>
</div>
<div class="field">
<span class="checkbox-label">Добавьте к напитку:</span>
<label class="checkbox-field">
<input type="checkbox" name="options" value="whipped cream"/>
<span>взбитых сливок</span>
</label>
<label class="checkbox-field">
<input type="checkbox" name="options" value="marshmallow"/>
<span>зефирок</span>
</label>
<label class="checkbox-field">
<input type="checkbox" name="options" value="chocolate"/>
<span>шоколад</span>
</label>
<label class="checkbox-field">
<input type="checkbox" name="options" value="cinnamon"/>
<span>корицу</span>
</label>
</div>
</fieldset>
</form>
</div>
<div>
<button type="button" class="add-button" onclick="addCoffee()">+ Добавить напиток</button>
</div>
<div style="margin-top: 30px">
<button type="submit" class="submit-button" onclick="showLightbox()">Готово</button>
</div>

<script src="index.js"></script>
</body>
<script src="index.js"></script>
</body>
</html>
77 changes: 77 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
let count = 1;
const example = document.querySelector(".beverage-form");
const conversion = {
"espresso": "Эспрессо",
"capuccino": "Капучино",
"cacao": "Какао",
"usual": "обычное молоко",
"no-fat": "обезжиренное молоко",
"soy": "соевое молоко",
"coconut": "кокосовое молоко",
"whipped cream": "взбитые сливки",
"marshmallow": "зефир",
"chocolate": "шоколад",
"cinnamon": "корица"
};

function deleteCoffee(elem) {
if (count === 1)
return;
count--;
let numToDel = getNumber(elem);
elem.parentNode.removeChild(elem);
for (let drink of document.querySelectorAll(".beverage-form")) {
const numOfCoffee = getNumber(drink);
if (numOfCoffee > numToDel) {
drink.id = `form${numOfCoffee - 1}`;
drink.querySelector(".beverage-count").textContent = `Напиток №${numOfCoffee - 1}`;
}
}
}

getNumber = (elem) => {
return +elem.id.slice(4);
};

function showLightbox() {
document.querySelector(".hidden").style.display = "flex";
document.querySelector(".countOfCoffee").textContent = getText(count);
document.querySelector("table").innerHTML = makeTable(document.querySelectorAll(".beverage-form"));
}

getText = (countOfCoffee) => {
const orderText = `Вы заказали ${countOfCoffee}`;
if (countOfCoffee % 10 === 1 && !(countOfCoffee % 100 === 11))
return `${orderText} напиток`;
else if (countOfCoffee % 10 > 1 && countOfCoffee % 10 < 5 && (countOfCoffee % 100 < 12 || countOfCoffee % 100 > 14))
return `${orderText} напитка`;
else
return `${orderText} напитков`;
}

function addCoffee() {
count++;
const newDrink = example.cloneNode(true);
newDrink.id = `form${count}`;
newDrink.innerHTML = newDrink.innerHTML.replace("Напиток №1", `Напиток №${count}`);
document.querySelector(".beverages").append(newDrink);
}

makeTable = (forms) => {
let rows = '<tr><th>Напиток</th><th>Молоко</th><th>Дополнительно</th></tr>';
forms.forEach(form => {
const fromData = new FormData(form);
rows += "<tr>" + convertToRow(fromData) + "</tr>";
})
return rows;
}

convertToRow = (formData) => {
return `
<td>${conversion[formData.get('type')]}</td>
<td>${conversion[formData.get('milk')]}</td>
<td>${formData.getAll('options').map(option => conversion[option]).join(", ")}</td>`;
}

addCoffee();
deleteCoffee(example);
78 changes: 78 additions & 0 deletions styles.css
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
.beverage {
position: relative;
border: 1px solid #eee;
margin: 15px 0;
padding: 15px;
width: 300px;
}

.beverage-count {
Expand Down Expand Up @@ -45,3 +47,79 @@
border-radius: 5px;
}

.lightbox {
width: 500px;
position: relative;
background-color: #FFFFFF;
z-index: 2;
}

.lightbox-head {
display: flex;
justify-content: space-between;
}

.textarea {
display: flex;
align-items: flex-start;
}

.comment-text {
margin-left: 30px;
}

.lightbox-form {
margin: 5px auto 10px 30px;
}

.countOfCoffee {
margin: 10px auto auto 30px;
text-align: center;
font-size: medium;
}

.lightboxClose {
top: 0;
right: 0;
position: relative;
}

table {
text-align: center;
width: 480px;
margin: 10px;
border-collapse: collapse;
border: 1px solid black;
}

table tr:nth-child(2n) {
background-color: lightgray;
}

th {
border-bottom: 1px solid grey;
}

td {
border-top: 1px solid grey;
}

.close {
position: absolute;
top: 10px;
right: 10px;
}

.hidden {
backdrop-filter: blur(2px);
background-color: rgba(0, 0, 0, 0.3);
height: 100%;
width: 100%;
position: fixed;
display: none;
justify-content: center;
align-items: center;
z-index: 5;
top: 0;
left: 0;
}