Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Усынин Андрей #39

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
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
57 changes: 3 additions & 54 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,64 +6,13 @@
<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>
</div>
</fieldset>
<div>
<div id="add-button-container">
<button type="button" class="add-button">+ Добавить напиток</button>
</div>
<div style="margin-top: 30px">
<div id = "submit-button-container" style="margin-top: 30px">
<button type="submit" class="submit-button">Готово</button>
</div>
</form>

<script src="index.js"></script>
</body>
</html>
</html>
201 changes: 201 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
let counter = 0;

const form = document.querySelector('.form');
const addBut = document.querySelector('.add-button');
const submBut = document.querySelector('.submit-button');

createNewForm();
addBut.onclick = createNewForm;
submBut.onclick = function () {
let window = document.createElement('div');
window.classList.add('modal-container');
window.innerHTML = `
<div class="modal-window">
<div class="modal-window-header">
<h1 class = "modal-window-title">Ваш заказ принят!</h1>
<button class="close-Button">X</button>
</div>
<h3>${generateModalHeader()}</h3>
<div class = "table-container">
<table class = "order-table">
<tr>
<th>Напиток</th>
<th>Молоко</th>
<th>Дополнительно</th>
<th>Пожелания</th>
</tr>
</table>
</div>
<div>
<lable>Выберите время заказа</lable>
<input class = "time" type = "time"></input>
<button class = "submit">Заказать</button>
</div>
</div>
`;
let subButon = window.querySelector('.submit');
subButon.onclick = function (){
let time = window.querySelector('.time').value;
let sysTime = new Date();
if(time.split(':')[0] < sysTime.getHours()){
alert('Мы не умеем перемещаться во времени. Выберите время позже, чем текущее');
}
else{
if(time.split(':')[0] ==sysTime.getHours() && time.split(':')[1] < sysTime.getMinutes())
alert('Мы не умеем перемещаться во времени. Выберите время позже, чем текущее');
else
document.body.removeChild(window);
}
}
collectDataFromForms(window);
let button = window.querySelector('.close-Button');
button.onclick = function () {
document.body.removeChild(window);
}
document.body.appendChild(window);
}

function collectDataFromForms(window) {
let table = window.querySelector('.order-table');
let forms = document.querySelectorAll('.form');
for (let form of forms) {
let row = document.createElement('tr');
let data = new FormData(form);
row.innerHTML = `<td>${data.get('drink')}</td>
<td>${data.get('milk')}</td>
<td>${data.getAll('options').toString().replace(',', ', ')}</td>
<td>${data.get('comment')}</td>`;
table.appendChild(row);
}
}

function generateModalHeader() {
let str = `Вы заказали ${counter} `;
let drink = 'напитков'

if (!(counter % 100 > 10 && counter % 100 < 20)) {
switch (counter
% 10) {
case 1:
drink = 'напиток';
break;
case 2:
drink = 'напитка';
break;
case 3:
drink = 'напитка';
break;
case 4:
drink = 'напитка';
break;
}
}
str += drink;
return str;
}

function CreateCommentSection(){
let container = document.createElement('div');
container.classList.add('field')
container.innerHTML = `<div class = "field">
<span class="label-text">И еще </br> вот что:</span>
<textarea class = "comment" name="comment"></textarea>
<p class = "comment-repeat"></p>
</div>`;
let textArea = container.querySelector('.comment');
let textRepeat = container.querySelector('.comment-repeat');
textArea.oninput = function (){
let text = textArea.value;
let reg = /срочно|быстрее|побыстрее|скорее|поскорее|очень нужно/gmi;
text = text.replace(reg, x => `<b>${x}</b>`);
textRepeat.innerHTML = text;
}
return container;
}

function CreateRemovingButton(newForm) {
let clos = document.createElement('button');
clos.textContent = 'X';
clos.classList.add('close-Button');

clos.onclick = function () {
if (counter
== 1) {
alert('Невозможно удалить последний заказ')
return;
}
counter--;
document.body.removeChild(newForm);
changeNames();
}
return clos;
}
function changeNames() {
let headers = document.querySelectorAll('.beverage-count');
for (let i = 0; i < counter; i++) {
headers[i].textContent = `Напиток №${i + 1}`;
}
}

function createNewForm() {
counter++;
let newForm = document.createElement('form');
newForm.classList.add('form');
newForm.innerHTML = `<fieldset class="beverage">
<div class = "form-header">
<h4 class="beverage-count">Напиток №${counter
}</h4>
</div>
<label class="field">
<span class="label-text">Я буду</span>
<select name = 'drink'>
<option value="Эспрессо">Эспрессо</option>
<option value="Капучино" selected>Капучино</option>
<option value="Какао">Какао</option>
</select>
</label>
<div class="field">
<span class="checkbox-label">Сделайте напиток на</span>
<label class="checkbox-field">
<input type="radio" name="milk" value="обычное" checked />
<span>обычном молоке</span>
</label>
<label class="checkbox-field">
<input type="radio" name="milk" value="обезжиренное" />
<span>обезжиренном молоке</span>
</label>
<label class="checkbox-field">
<input type="radio" name="milk" value="соевое" />
<span>соевом молоке</span>
</label>
<label class="checkbox-field">
<input type="radio" name="milk" value="кокосовое" />
<span>кокосовом молоке</span>
</label>
</div>
<div class="field">
<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>
</fieldset>`;
let clos = CreateRemovingButton(newForm);
let comment = CreateCommentSection();
newForm.querySelector('.form-header').appendChild(clos);
newForm.querySelector('.beverage').appendChild(comment);
document.body.insertBefore(newForm, document.getElementById("add-button-container"));
}
70 changes: 68 additions & 2 deletions styles.css
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
html{
background-color: #7999e1;
font-family:monospace;
font-size: larger;
}

.beverage {
border: 1px solid #eee;
border: 1px solid rgb(0, 0, 0);
background-color: rgb(106, 219, 219);
margin: 15px 0;
padding: 15px;
}

.beverage-count {
margin: 0 0 15px;
font-size: xx-large;
}

.field {
Expand Down Expand Up @@ -41,7 +49,65 @@
.submit-button {
font-size: 16px;
padding: 7px 15px;
border: 2px solid orange;
border: 2px solid black;
font-weight: 800;
border-radius: 5px;
}

.form-header{
display: flex;
justify-content: space-between;
}

.close-Button{
width: 35px;
height: 35px;
background-color: rgb(233, 0, 0);
font-size: large;
}


.modal-container {
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
background-color: rgba(105, 105, 105, 0.5);
display: flex;
align-items: center;
justify-content: center;
}

.modal-window {
width: 666px;
height: auto;
position: fixed;
background-color: #FFD37B;
padding: 15px;
text-align: center;
}

.modal-window-header{
display: flex;
justify-content: space-between;
align-items: flex-start;
}

.modal-window-title{
margin: 0;
}

.order-table{
display:inline;
align-items: center;
justify-content: center;
word-break: break-all;
}

th {
border: 2px solid black;
}
td {
border: 1px solid gray;
}