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
175 changes: 111 additions & 64 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,69 +1,116 @@
<!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>
</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>
<link rel="stylesheet" href="styles.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css"
integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
</head>
<body>

<div class="row justify-content-center">
<div class="col-8">
<form name='drinks'>
<fieldset class="beverage" id="drink1">
<h4 class="beverage-count">Напиток №1</h4>
<button type="button" class='delete btn-danger btn'>Удалить</button>
<label class="field">
<span class="label-text">Я буду</span>
<select class='drink-selection'>
<option value="Эспрессо">Эспрессо</option>
<option value="Капучино">Капучино</option>
<option value="Какао">Какао</option>
</select>
</label>
<div class="field milk-selection">
<span class="checkbox-label">Сделайте напиток на</span>
<label class="checkbox-field">
<input type="radio" name="milk1" value="Обычное"/>
<span>обычном молоке</span>
</label>
<label class="checkbox-field">
<input type="radio" name="milk1" value="Обезжиренное" />
<span>обезжиренном молоке</span>
</label>
<label class="checkbox-field">
<input type="radio" name="milk1" value="Соевое" />
<span>соевом молоке</span>
</label>
<label class="checkbox-field">
<input type="radio" name="milk1" value="Кокосовое" />
<span>кокосовом молоке</span>
</label>
</div>
<div class="field add-selection">
<span class="checkbox-label">Добавьте к напитку:</span>
<label class="checkbox-field">
<input type="checkbox" name="options" value="Взбитые сливки" />
<span>взбитых сливок</span>
</label>
<label class="checkbox-field">
<input type="checkbox" name="options" value="Зефирки" />
<span>зефирок</span>
</label>
<label class="checkbox-field">
<input type="checkbox" name="options" value="Шоколад" />
<span>шоколад</span>
</label>
<label class="checkbox-field">
<input type="checkbox" name="options" value="Корица" />
<span>корицу</span>
</label>
</div>
<label for=""></label><textarea name="" id="" oninput="changeText(event)"></textarea>
<p class="textAreaContent"></p>
</fieldset>
<div class='btn'>
<button type="button" class="add-button btn btn-light btn-lg">+ Добавить напиток</button>
</div>
<button id='submit-btn' type="submit" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
Готово
</button>
</form>
</div>
</div>



<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content" style="width:600px; box-sizing: border-box;">

<div class="modal-header">
<h4>Заказ принят!</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>

<div class="modal-body">
<p></p>
<table></table>
<form name='modalForm' id="modalForm">
<br>
<label>
<input type="time">
</label> Выберите время<br><br>
<input type="submit" value="Оформить" class="btn btn-primary btn-lg">
</form>
</div>

<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Закрыть</button>
</div>

</div>
</fieldset>
<div>
<button type="button" class="add-button">+ Добавить напиток</button>
</div>
<div style="margin-top: 30px">
<button type="submit" class="submit-button">Готово</button>
</div>
</form>
</div>
</div>

<script src="index.js"></script>
</body>
</html>
<script src="index.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js"
integrity="sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx"
crossorigin="anonymous"></script>
</body>
</html>
99 changes: 99 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
document.querySelector(".add-button").addEventListener('click', addDrink);
let drinks = `<tr><td>Напиток</td><td>Молоко</td><td>Дополнительно</td><td>Пожелания</td></tr>`;
let keyWords = ["срочно", "быстрее", "побыстрее", "скорее", "поскорее", "очень нужно"]

function updateDelete() {
let deletes = document.getElementsByClassName("delete");
for (let del of deletes) {
del.addEventListener('click', function (event) {
event.preventDefault();
if (event.target.parentNode.id !== 'drink1') event.target.parentNode.remove();
});
}
}

function addDrink() {
let allDrinks = document.getElementsByClassName("beverage");
let baseDrink = allDrinks[allDrinks.length - 1];
let newDrink = baseDrink.cloneNode(true);
newDrink.id = 'drink' + (+baseDrink.id.slice(5) + 1);
baseDrink.after(newDrink);
document.querySelector(`#${newDrink.id} .beverage-count`).innerHTML = ('Напиток №' + newDrink.id.slice(5));
let initialName = document.querySelector(`#${baseDrink.id} .milk-selection input`).name;
Array.from(document.querySelectorAll(`#${newDrink.id} .milk-selection input`)).map((element) => element.name = 'milk' + (+initialName.slice(4) + 1));
updateDelete();
}

function changeText(event) {
let content = event.target.value.toString();
for (let word of keyWords) {
if (content.includes(word)) {
let start = content.indexOf(word);
let end = content.indexOf(word) + word.length - 1;
content = content.substring(0, start) + '<b>' + word + '</b>' + content.substring(end + 1, content.length);
}
}
document.querySelector('.textAreaContent').innerHTML = "Ваши пожелания: " + content;
}

document.forms.drinks.onsubmit = function (event) {
event.preventDefault();
let beverages = Array.from(document.getElementsByClassName("beverage"));
for (let beverage of beverages) {
let attribute = beverage.getAttribute('id');
let information = new Information(attribute);
Array.from(document.querySelectorAll(`#${attribute} .add-selection input`)).map((element) => {
if (element.checked) information.addedBuns.push(element.value);
})
drinks +=
`<tr>
<td>${information.drink}</td>
<td>${information.milk}</td>
<td>${information.addedBuns}</td>
<td>${information.desire}</td>
</tr>`;
}

document.querySelector('.modal-body table').innerHTML = drinks;
let count = Array.from(document.getElementsByClassName("beverage")).length.toString();
let word = '';
let element = count[count.length - 1];
if (element === 1 && +count !== 11) word = 'напиток'
else if (element === 2 || element === 3 || element === 4) word = 'напитка'
else word = 'напитков'
document.querySelector('.modal-body p').innerHTML = `Вы заказали ${count} ${word}`;
drinks =
`<tr>
<td>Напиток</td>
<td>Молоко</td>
<td>Дополнительно</td>
<td>Пожелания</td>
</tr>`;
}

document.forms.modalForm.onsubmit = function (event) {
event.preventDefault();
let time = document.querySelector(`#${event.target.id} input`).value;
let now = new Date().getHours() + ':' + new Date().getMinutes();
if (time < now) alert("Выберите время позже, чем текущее");
else {
alert(`Заказ оформлен на ${time}!`)
document.querySelector(".modal-footer button").click();
}
}

class Information {
constructor(id) {
this.id = id;
this.addedBuns = [];
this.desire = document.querySelector(`#${this.id} textarea`).value;
this.drink = (Array.from(document.querySelectorAll(`#${this.id} .drink-selection option`)).map((element) => {
if (element.selected)
return element.value;
})).toString().replace(/[\s.,%]/g, '');
this.milk = (Array.from(document.querySelectorAll(`#${this.id} .milk-selection input`)).map((element) => {
if (element.checked)
return element.value;
})).toString().replace(/[\s.,%]/g, '');
}
}
23 changes: 22 additions & 1 deletion styles.css
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
.beverage {
border: 1px solid #eee;
margin: 15px 0;
padding: 15px;
}
Expand Down Expand Up @@ -45,3 +44,25 @@
border-radius: 5px;
}

.delete {
float: right;
position: relative;
top: -20px;
}

table {
width: 550px;
table-layout: fixed;
}

table td {
border: 1px solid black;
padding: 5px;
word-wrap: break-word;
}

textarea {
width: 50%;
height: 150px;
}