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
Binary file added cute.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
44 changes: 35 additions & 9 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,22 @@
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<form>
<div class="cute"><img src="cute.png"></div>
<div class="beverages">
<form class="beverage-form" id = "form1">
<fieldset class="beverage">
<h4 class="beverage-count">Напиток №1</h4>
<input type="image" class="delete-button" src="x.png" alt="x">
<h4 class="beverage-count">Напиток №<span class="bev-num">1</span></h4>

<label class="field">
<span class="label-text">Я буду</span>
<select>
<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">
Expand All @@ -36,6 +41,7 @@ <h4 class="beverage-count">Напиток №1</h4>
<span>кокосовом молоке</span>
</label>
</div>

<div class="field">
<span class="checkbox-label">Добавьте к напитку:</span>
<label class="checkbox-field">
Expand All @@ -55,14 +61,34 @@ <h4 class="beverage-count">Напиток №1</h4>
<span>корицу</span>
</label>
</div>

<div class="field">
<div>И вот еще что:</div>
<label class="textarea">
<textarea name="comment" cols="25" rows="3" onchange="cloneText(this)"></textarea>
<span class="comment-text"></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>
</form>
</div>

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


<div class="modal" id="modal">
<div class="modal-content">
<button class="modal-close"><img src="x.png" width="25"></button>
<h2 class="modal-title">Заказ принят!</h2>
<p class="modal-description"></p>
<table></table>
</div>
</div>

<script src="index.js"></script>
</body>
Expand Down
64 changes: 64 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
let baseForm = document.querySelector('.beverage-form');
let addButton = document.querySelector('.add-button');
let submitButton = document.querySelector('.submit-button');
let deleteButton = document.querySelector('.delete-button');
let counter = 1;

function cloneForm(){
counter++;
let clone = baseForm.cloneNode(true);
clone.querySelector('.bev-num').innerHTML = String(counter);
clone.id = `form${counter}`;
document.querySelector(".beverages").append(clone);
if (counter != 1){
let delClone = clone.querySelector('.delete-button');
delClone.addEventListener('click', () => {
clone.remove();
counter--;
})
}
}

function submit(event) {
event.preventDefault();
let modalWindow = document.querySelector('.modal');
let closeButton = document.querySelector('.modal-close')
let orderDetail = 'напитков';
if ((counter % 10 == 1) && (counter % 100 != 11))
orderDetail = 'напиток';
else if (counter % 10 >= 2 && counter % 10 <= 4 && counter % 100 != 12 && counter % 100 != 14)
orderDetail = 'напитка';
modalWindow.classList.add('active');
document.querySelector('.modal-description').textContent = `Вы заказали ${counter} ${orderDetail}`;
document.querySelector("table").innerHTML = makeTable(document.querySelectorAll(".beverage-form"));
closeButton.addEventListener('click', () => {
modalWindow.classList.remove('active')
})
}

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

function convertToRow(formData){
const convertion = {"espresso": "Эспрессо", "capuccino": "Капучино", "cacao": "Какао",
"usual": "на обычном молоке", "no-fat": "на обезжиренном молоке", "soy": "на соевом молоке", "coconut":"на кокосовом молоке",
"whipped cream": "взбитых сливок", "marshmallow": "зефирок", "chocolate":"шоколад", "cinnamon":"корицу"};
return `<td>${convertion[formData.get('type')]}</td>
<td>${convertion[formData.get('milk')]}</td>
<td>${formData.getAll('options').map(option => convertion[option])}</td>
<td>${formData.get('comment')}</td>`;
}

addButton.addEventListener('click', cloneForm);
submitButton.addEventListener('click', submit);

cloneText = (textarea) =>{
let text = textarea.value.replace(/(срочно)|(быстрее)|(побыстрее)|(скорее)|(поскорее)|(очень нужно)/gi,"<b>$&</b>");
textarea.parentNode.querySelector("span").innerHTML = text;
}
90 changes: 90 additions & 0 deletions styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,93 @@
border-radius: 5px;
}

.delete-button{
height: 25px;
width: 25px;
position: absolute;
left: 250px;
}

.cute{
position: fixed;
bottom: 0px;
right: 10px;
}

.modal{
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1000;
background: rgba(0, 0, 0, 0.75);
display: flex;
justify-content: center;
align-items: center;
overflow-y: scroll;
padding: 60px 15px;
visibility: hidden;
}

.modal-content{
width: 100%;
max-width: 500px;
height: auto;
display: flex;
padding: 0px 0px 20px 0px;
justify-content: center;
align-items: center;
flex-direction: column;
background: #f9f9f9;
border-radius: 3px;
position: relative;
box-shadow: 0 5px 15px black;
}

.modal-close{
background: #ff0000;
height: 30px;
width: 30px;
display: flex;
justify-content: center;
align-items: center;
border: none;
position: absolute;
right: 0;
top: 0;
background: none;
cursor: pointer;
}

.modal-description {
margin: 0px 0px 20px 0px;
font-size: 1.125rem;
}

.active {
position: fixed;
top: 0;
visibility: visible;
opacity: 1;
}

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

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

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

.comment-text{
margin-left: 50px;
}
Binary file added x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.