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
35 changes: 28 additions & 7 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@
</head>
<body>
<form>
<fieldset class="beverage">
<h4 class="beverage-count">Напиток №1</h4>
<fieldset class="beverage" id="1">
<button type="button" class="delete-button" id="1"><img src="delete cross.svg">
</button>
<h4 class="beverage-count">Напиток №1</h4>
<label class="field">
<span class="label-text">Я буду</span>
<select>
Expand All @@ -20,23 +22,23 @@ <h4 class="beverage-count">Напиток №1</h4>
<div class="field">
<span class="checkbox-label">Сделайте напиток на</span>
<label class="checkbox-field">
<input type="radio" name="milk" value="usual" checked />
<input type="radio" name="milk1" value="usual" checked />
<span>обычном молоке</span>
</label>
<label class="checkbox-field">
<input type="radio" name="milk" value="no-fat" />
<input type="radio" name="milk1" value="no-fat" />
<span>обезжиренном молоке</span>
</label>
<label class="checkbox-field">
<input type="radio" name="milk" value="soy" />
<input type="radio" name="milk1" value="soy" />
<span>соевом молоке</span>
</label>
<label class="checkbox-field">
<input type="radio" name="milk" value="coconut" />
<input type="radio" name="milk1" value="coconut" />
<span>кокосовом молоке</span>
</label>
</div>
<div class="field">
<div class="field additionaly">
<span class="checkbox-label">Добавьте к напитку:</span>
<label class="checkbox-field">
<input type="checkbox" name="options" value="whipped cream" />
Expand All @@ -55,6 +57,11 @@ <h4 class="beverage-count">Напиток №1</h4>
<span>корицу</span>
</label>
</div>
<div class="text-output">
<label for="">И ещё вот что</label>
<textarea class="text-area" cols="20" rows="2"></textarea>
<p></p>
</div>
</fieldset>
<div>
<button type="button" class="add-button">+ Добавить напиток</button>
Expand All @@ -63,6 +70,20 @@ <h4 class="beverage-count">Напиток №1</h4>
<button type="submit" class="submit-button">Готово</button>
</div>
</form>
<div class="modal-window">
<div class="modal-window-content">
<img src="delete cross.svg">
<h2>Заказ принят!</h2>
<p></p>
<table class="table">
<tr>
<th>Напиток</th>
<th>Молоко</th>
<th>Дополнительно</th>
</tr>
</table>
</div>
</div>

<script src="index.js"></script>
</body>
Expand Down
151 changes: 151 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
let beverageCount = 1;
let beverageCounter = 1;
let deleteButton = document.querySelector('.delete-button');
let textArea = document.querySelector('.text-area');

const addButton = document.querySelector('.add-button');
const modalWindow = document.querySelector('.modal-window');
const modalWindowContent = document.querySelector('.modal-window-content');
const modalWindowButton = document.querySelector('.submit-button');


const translation = {'espresso': 'Эспрессо',
'capuccino': 'Капучино',
'cacao': 'Какао',
'usual': 'обычное',
'no-fat': 'обезжиренное',
'soy': 'соевое',
'coconut': 'кокосовое',
'whipped cream': 'взбитые сливки',
'marshmallow': 'зефирки',
'chocolate': 'шоколад',
'cinnamon': 'корица'}


function defineEnding(number, words) {
return words[(number % 100 > 4 && number % 100 < 20) ? 2 : [2, 0, 1, 1, 1, 2][(number % 10 < 5) ? Math.abs(number) % 10 : 5]];
}

function addBeverage() {
++beverageCounter;
++beverageCount;
document.querySelector('.add-button').insertAdjacentHTML('beforebegin', `
<fieldset class="beverage" id="${beverageCounter}">
<button type="button" class="delete-button" id="${beverageCounter}"><img src="delete cross.svg"></button>
<h4 class="beverage-count">Напиток №${beverageCounter}</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${beverageCounter}" value="usual" checked />
<span>обычном молоке</span>
</label>
<label class="checkbox-field">
<input type="radio" name="milk${beverageCounter}" value="no-fat" />
<span>обезжиренном молоке</span>
</label>
<label class="checkbox-field">
<input type="radio" name="milk${beverageCounter}" value="soy" />
<span>соевом молоке</span>
</label>
<label class="checkbox-field">
<input type="radio" name="milk${beverageCounter}" value="coconut" />
<span>кокосовом молоке</span>
</label>
</div>
<div class="field additionaly${beverageCounter}">
<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>
<div class="text-output">
<textarea class="text-area" cols="20" rows="2"></textarea>
<p></p>
</div>
</fieldset>`);
const deleteButtons = document.getElementsByClassName('delete-button')
Array.from(deleteButtons).forEach(function(deleteButton) {
deleteButton.addEventListener('click', deleteBevarage);
});
const textAreas = document.getElementsByClassName('text-area');
Array.from(textAreas).forEach(function(textArea) {
textArea.addEventListener('keyup', printWishes);
});
}

function deleteBevarage(event) {
if (beverageCount > 1) {
const fieldsetID = event.target.parentNode.id;
document.getElementById(fieldsetID).remove();
--beverageCount;
}
}

function showModalWindow(event) {
event.preventDefault();
modalWindow.style.display = 'block';
modalWindowContent.style.display = 'inline';
for (let fieldset of document.querySelectorAll('fieldset')) {
const beverageType = translation[fieldset.querySelector('select').value];
let milkType;
for (const radioButton of document.querySelectorAll(`input[name="milk${fieldset.id}"]`)) {
if (radioButton.checked) {
milkType = translation[radioButton.value];
}
}
let additionaly = [];
for (const checkBox of document.querySelectorAll(`.additionaly${fieldset.id} .checkbox-field input`)) {
if (checkBox.checked) {
additionaly.push(translation[checkBox.value]);
}
}
document.querySelector('.table').insertAdjacentHTML('beforeend', `
<tr>
<td>${beverageType}</td>
<td>${milkType}</td>
<td>${additionaly.join(', ')}</td>
</tr>`)
};
modalWindowContent.querySelector('p').textContent = `Вы заказали ${beverageCount} ` + defineEnding(beverageCount, ['напиток', 'напитка', 'напитков']);
}

function hideModalWindow() {
modalWindow.style.display = 'none';
modalWindowContent.style.display = 'none';
}

function printWishes(event) {
let inputText = event.target.value;
const attentionWords = ['срочно', 'быстрее', 'побыстрее', 'скорее', 'поскорее', 'очень нужно'];
for (const word of attentionWords) {
inputText = inputText.replace(new RegExp(word, 'i'), `<b>$&</b>`)
};
event.target.nextSibling.nextSibling.innerHTML = inputText;
}

addButton.addEventListener('click', addBeverage);
deleteButton.addEventListener('click', deleteBevarage);
modalWindowButton.addEventListener('click', showModalWindow);
modalWindowContent.addEventListener('click', hideModalWindow);
textArea.addEventListener('keyup', printWishes);
77 changes: 77 additions & 0 deletions styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,81 @@
border: 2px solid orange;
border-radius: 5px;
}
.delete-button img {
width: 15px;
height: 15px;
}

.delete-button {
position: relative;
bottom: 0px;
left: 200px;
}

.modal-window {
display: none;
position: fixed;
z-index: 1;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
background-color: rgb(0,0,0);
background-color: rgba(0,0,0,0.4);
}

.modal-window-content {
display: none;
position: fixed;
z-index: 2;
width: 500px;
height: 25%;
overflow: auto;
background-color: rgb(255, 255, 255);
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
border-radius: 2%;
}

.modal-window-content h2 {
position: fixed;
text-align: center;
top: 5%;
left: 50%;
transform: translate(-50%, -50%);
}

.modal-window-content img {
position: relative;
width: 7%;
height: 7%;
margin-left: 93%;
margin-top: 1%;
}

.modal-window-content p {
position: fixed;
left: 50%;
transform: translate(-50%, 50%);
}

.text-output {
word-break: break-word;
width: 170px;
}

.table, tr, td, th {
border: 1px solid black;
}

.table {
width: 400px;
height: 20px;
table-layout: fixed;
border-collapse: collapse;
margin-top: 50px;
margin-left: auto;
margin-right: auto;
}