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
96 changes: 96 additions & 0 deletions submissions/TaniaBondarenko/js-html-movie-seat-booking/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
const SEATS = document.querySelector(".seats");
let bookingButton;
let shopContainer;
let ticketChosen;
let ticketClass;
let totalPrice = 0;
let count = 0;

function createShopContainer() {
shopContainer = document.createElement("div");
shopContainer.setAttribute("class", "shopContainer");
SEATS.appendChild(shopContainer);
}

SEATS.addEventListener("click", chooseTicket);

function chooseTicket({ target }) {
ticketChosen = target;
if (!target.matches("input")) {
return;
} else if (!target.classList.contains("clicked")) {
createBookingButton();
rowSeat = ticketChosen.value.split("-");
target.classList.add("clicked");
addTicket();
} else {
defineTicketClass();
target.classList.remove("clicked");
document.getElementsByClassName(`${target.value}`)[0].remove();
totalPrice -= price;
count -= 1;
}
}

function addTicket() {
defineTicketClass();
let bookTicket = document.createElement("div");
bookTicket.setAttribute("class", `bookTicket ${ticketChosen.value}`);
shopContainer.appendChild(bookTicket);
bookTicket.innerHTML += `
<span class="bookTicketRow">Row ${rowSeat[0]} </span>
<span class="bookTicketSeat">Seat ${rowSeat[1]} </span>
<span class="BookTicketClass">${ticketClass} </span>
<span class="price">${price} usd</span>
`;
totalPrice += price;
count += 1;
}

function defineTicketClass() {
let row = ticketChosen.parentElement.parentElement;
if (row.classList.contains("rowVip")) {
ticketClass = "VIP";
price = 300;
} else {
ticketClass = "LUX";
price = 100;
}
}

let createBookingButton = (function () {
let executed = false;
return function () {
if (!executed) {
executed = true;
bookingButton = document.createElement("div");
bookingButton.setAttribute("class", "submitButton");
bookingButton.innerHTML = `<button class="booking" type="submit">Continue</button>`;
SEATS.appendChild(bookingButton);
createShopContainer();
bookingButton.addEventListener("click", buyTicket, { once: true });
}
};
})();

function buyTicket() {
let paidDiv = document.createElement("div");
paidDiv.innerHTML = `<hr>Total price for ${count} tickets - ${totalPrice}usd`;
shopContainer.appendChild(paidDiv);
stopNextActions();
createPaidButton();
}

function stopNextActions() {
let inputs = Array.from(document.querySelectorAll("input"));
inputs.forEach((element) => element.setAttribute("disabled", "disabled"));
bookingButton.remove();
}

function createPaidButton() {
let paidButton = document.createElement("div");
paidButton.setAttribute("class", "paidButton");
paidButton.innerHTML = `<button class="lastButton" type="submit">Pay</button>`;
shopContainer.appendChild(paidButton);
paidButton.scrollIntoView({ block: "end" });
}
173 changes: 173 additions & 0 deletions submissions/TaniaBondarenko/js-html-movie-seat-booking/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Movie-seat-booking</title>
<link href="styles.css" type="text/css" rel="stylesheet" />
</head>
<body>
<main class="mainContainer">
<section class="posterContainer">
<div class="poster"><img class="posterImg" src="images/brw.jpg" alt="Poster to film" /></div>
<div class="badge" data-description="lux">
<div class="badgeSeat lux"></div>
<div class="ticketType">
<div class="name">Lux</div>
<span class="price">100</span>
<small class="currency">usd</small>
</div>

<div class="badgeSeat vip"></div>
<div class="ticketType">
<div class="name">Vip</div>
<span class="price">300</span>
<small class="currency">usd</small>
</div>
</div>
<div class="legend">
<div class="occupiedSeat"></div>
<div class="description">Occupied seat</div>
<div class="blockedSeat"></div>
<div class="description">Blocked seat</div>
</div>
</section>

<div class="cinemaContainer">
<div class="filmInfo">
<h2 class="filmTitle">2001: A Space Odyssey</h2>
<p>2h 29min</p>
<p>Adventure, Sci-Fi</p>
<p>IMDb 8.3</p>
<time datetime="1968-05-12"> 12 May 1968</time>
</div>
<div class="screenImg">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-290 -20 1400 50">
<path
d="M3.2,20l-2,0.2l-0.3-4l2-0.2C136.2,5.3,269.6,0,403,0s266.8,5.3,400.2,16l2,0.2l-0.3,4l-2-0.2 C669.5,9.3,536.3,4,403,4S136.4,9.3,3.2,20z"
></path>
</svg>
</div>
<div class="screenText">SCREEN</div>

<div class="seats">
<section class="rowLux">
<span class="rowText">1</span>
<label class="seatLabel" for="checkbox1-6">
<input id="checkbox1-6" type="checkbox" value="1-6" class="hiddenCheckbox" />
<span class="seat"></span>
</label>
<label class="seatLabel" for="checkbox1-5">
<input id="checkbox1-5" type="checkbox" value="1-5" class="hiddenCheckbox" />
<span class="seat"></span>
</label>
<label class="seatLabel" for="checkbox1-4">
<input id="checkbox1-4" disabled type="checkbox" value="1-4" class="hiddenCheckbox disabled notActive" />
<span class="seat"></span>
</label>
<label class="seatLabel" for="checkbox1-3">
<input id="checkbox1-3" disabled type="checkbox" value="1-3" class="hiddenCheckbox disabled notActive" />
<span class="seat"></span>
</label>
<label class="seatLabel" for="checkbox1-2">
<input id="checkbox1-2" type="checkbox" value="1-2" class="hiddenCheckbox" />
<span class="seat"></span>
</label>
<label class="seatLabel" for="checkbox1-1">
<input id="checkbox1-1" type="checkbox" value="1-1" class="hiddenCheckbox" />
<span class="seat"></span>
</label>
<span class="rowText">1</span>
</section>
<section class="rowLux">
<span class="rowText">2</span>
<label class="seatLabel" for="checkbox2-6">
<input id="checkbox2-6" type="checkbox" value="2-6" class="hiddenCheckbox" />
<span class="seat"></span>
</label>
<label class="seatLabel" for="checkbox2-5">
<input id="checkbox2-5" type="checkbox" value="2-5" class="hiddenCheckbox" />
<span class="seat"></span>
</label>
<label class="seatLabel" for="checkbox2-4">
<input id="checkbox2-4" disabled type="checkbox" value="2-4" class="hiddenCheckbox disabled notActive" />
<span class="seat"></span>
</label>
<label class="seatLabel" for="checkbox2-3">
<input id="checkbox2-3" disabled type="checkbox" value="2-3" class="hiddenCheckbox disabled notActive" />
<span class="seat"></span>
</label>
<label class="seatLabel" for="checkbox2-2">
<input id="checkbox2-2" type="checkbox" value="2-2" class="hiddenCheckbox" />
<span class="seat"></span>
</label>
<label class="seatLabel" for="checkbox2-1">
<input id="checkbox2-1" type="checkbox" value="2-1" class="hiddenCheckbox" />
<span class="seat"></span>
</label>
<span class="rowText">2</span>
</section>
<section class="rowLux">
<span class="rowText">3</span>
<label class="seatLabel" for="checkbox3-6">
<input id="checkbox3-6" checked disabled type="checkbox" value="3-6" class="hiddenCheckbox booked" />
<span class="seat booked"></span>
</label>
<label class="seatLabel" for="checkbox3-5">
<input id="checkbox3-5" checked disabled type="checkbox" value="3-5" class="hiddenCheckbox booked" />
<span class="seat booked"></span>
</label>
<label class="seatLabel" for="checkbox3-4">
<input id="checkbox3-4" disabled type="checkbox" value="3-4" class="hiddenCheckbox disabled notActive" />
<span class="seat"></span>
</label>
<label class="seatLabel" for="checkbox3-3">
<input id="checkbox3-3" disabled type="checkbox" value="3-3" class="hiddenCheckbox disabled notActive" />
<span class="seat"></span>
</label>
<label class="seatLabel" for="checkbox3-2">
<input id="checkbox3-2" type="checkbox" value="3-2" class="hiddenCheckbox" />
<span class="seat"></span>
</label>
<label class="seatLabel" for="checkbox3-1">
<input id="checkbox3-1" type="checkbox" value="3-1" class="hiddenCheckbox" />
<span class="seat"></span>
</label>
<span class="rowText">3</span>
</section>
<section class="rowVip">
<hr />
<span class="rowText">4</span>
<label class="seatLabel" for="checkbox4-6">
<input id="checkbox4-6" type="checkbox" value="4-6" class="hiddenCheckbox" />
<span class="seat"></span>
</label>
<label class="seatLabel" for="checkbox4-5">
<input id="checkbox4-5" type="checkbox" value="4-5" class="hiddenCheckbox" />
<span class="seat"></span>
</label>
<label class="seatLabel" for="checkbox4-4">
<input id="checkbox4-4" disabled type="checkbox" value="4-4" class="hiddenCheckbox disabled" />
<span class="seat empty"></span>
</label>
<label class="seatLabel" for="checkbox4-3">
<input id="checkbox4-3" disabled type="checkbox" value="4-3" class="hiddenCheckbox disabled" />
<span class="seat empty"></span>
</label>
<label class="seatLabel" for="checkbox4-2">
<input id="checkbox4-2" checked disabled type="checkbox" value="4-2" class="hiddenCheckbox booked" />
<span class="seat booked"></span>
</label>
<label class="seatLabel" for="checkbox4-1">
<input id="checkbox4-1" checked disabled type="checkbox" value="4-1" class="hiddenCheckbox booked" />
<span class="seat booked"></span>
</label>
<span class="rowText">4</span>
</section>
</div>
</div>
</div>
</main>
<script src="app.js"></script>
</body>
</html>
Loading