Skip to content
Open

Hw2 #201

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
196 changes: 196 additions & 0 deletions buy-list.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
//2
let products = [
{
id: 1, name: "Помідори", amount: 2, isBought:true
},
{
id: 2, name: "Печиво", amount: 2, isBought:false
},
{
id: 3, name: "Сир", amount: 1, isBought:false
}
];

const addItem = document.getElementById("add-item");
const item = document.getElementById("item");
const productListItems = document.getElementById("product-list-items");
const leftList = document.getElementById("left-list");
const boughtList = document.getElementById("bought-list");

//1
addItem.addEventListener("submit", (e)=>{
e.preventDefault();

const name = item.value.trim();
if(!name )
return;

const newItem={
id: Date.now(),
name: name,
amount: 1,
isBought: false
};

products.push(newItem);

item.value="";
item.focus();
render();
});

function render(){

productListItems.innerHTML = "";
leftList.innerHTML = "";
boughtList.innerHTML = "";

products.forEach(product => {

const li = document.createElement('li');

//5
const nameSpan = document.createElement('span');
nameSpan.className = 'product-item';
nameSpan.textContent = product.name;

if (product.isBought) {
nameSpan.style.textDecoration = 'line-through';
}
else
{
nameSpan.style.cursor = 'pointer';
nameSpan.addEventListener('click', () => {

const inputEdit = document.createElement('input');
inputEdit.type = 'text';
inputEdit.value = product.name;
inputEdit.className = 'product-item-input';

li.replaceChild(inputEdit, nameSpan);
inputEdit.focus();

const saveName = () => {
const newName = inputEdit.value.trim();
if (newName) {
product.name = newName;
}

render();
};

inputEdit.addEventListener('blur', saveName);
inputEdit.addEventListener('keydown', (e) => {
if (e.key === 'Enter') saveName();
});
});
}

li.appendChild(nameSpan);

//6
if (!product.isBought) {
const btnMinus = document.createElement('button');
btnMinus.className = 'btn-minus';
btnMinus.textContent = '-';
btnMinus.setAttribute('data-tooltip', 'Зменшити кількість');

if (product.amount <= 1) {
btnMinus.style.opacity = '0.6';
btnMinus.disabled = true;
btnMinus.style.cursor = 'not-allowed';
}
else
{
btnMinus.addEventListener('click', () => {
product.amount--;
render();
});
}
li.appendChild(btnMinus);

const amountSpan = document.createElement('span');
amountSpan.className = 'amount';
amountSpan.textContent = product.amount;
li.appendChild(amountSpan);

const btnPlus = document.createElement('button');
btnPlus.className = 'btn-plus';
btnPlus.textContent = '+';
btnPlus.setAttribute('data-tooltip', 'Збільшити кількість');
btnPlus.addEventListener('click', () => {
product.amount++;
render();
});

li.appendChild(btnPlus);

}
else
{
const amountSpan = document.createElement('span');
amountSpan.className = 'amount';
amountSpan.textContent = product.amount;
amountSpan.style.marginLeft = 'auto';
li.appendChild(amountSpan);
}

//4
const btnBought = document.createElement("button")
btnBought.className = "btn-bought";
btnBought.textContent = product.isBought ? "Куплено" : "Не куплено";
btnBought.setAttribute("data-tooltip", product.isBought ? "Призначити як не куплене" : "Призначити як куплене");
btnBought.addEventListener("click", ()=> {
product.isBought = !product.isBought;
render();
});

li.appendChild(btnBought);

//3
if(!product.isBought){
const btnRemove = document.createElement("button");

btnRemove.className = "btn-remove";
btnRemove.textContent = "x";
btnRemove. setAttribute("data-tooltip", "Прибрати товар");
btnRemove.addEventListener("click", ()=> {
products = products.filter(products => products.id !==product.id);
render();
});

li.appendChild(btnRemove);
}

productListItems.appendChild(li);

//7
if(!product.isBought){
const lItem = document.createElement("li");
lItem.className="l-item";
lItem.textContent=product.name;

const lAmount = document.createElement("span");
lAmount.className="l-amount";
lAmount.textContent=product.amount;

lItem.appendChild(lAmount);
leftList.appendChild(lItem);
}
else
{
const bItem = document.createElement("li");
bItem.className = "b-item";
bItem.textContent=product.name;

const bAmount = document.createElement("span");
bAmount.className="b-amount";
bAmount.textContent=product.amount;

bItem.appendChild(bAmount);
boughtList.appendChild(bItem);
}
});
}

render();
71 changes: 62 additions & 9 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,16 +1,69 @@
<!DOCTYPE html>
<html>
<head lang="uk">
<html lang="uk">
<head>
<meta charset="UTF-8">
<title>My Page</title>


<title>Veronika Burmetska</title>
<link rel="stylesheet" type="text/css" href="main.css" />
</head>
<body>
<span class="product-item">
Apple
<span class="amount">4</span>
</span>
<main class="app-container">

<section class="product-list">
<form class="add-item" id="add-item">
<input type="text" id="item" placeholder="Назва товару">
<button class="btn-add" type="submit" data-tooltip="Додати товар">Додати</button>
</form>
<ul class="product-list-items" id="product-list-items">
<!-- <li>
<span class="product-item">Помідори</span>
<button class="btn-minus" data-tooltip="Зменшити кількість">-</button>
<span class="amount">2</span>
<button class="btn-plus" data-tooltip="Збільшити кількість">+</button>
<button class="btn-bought" data-tooltip="Призначити як куплене">Куплено</button>
<button class="btn-remove" data-tooltip="Прибрати товар">x</button>
</li>
<li>
<span class="product-item">Печиво</span>
<button class="btn-minus" data-tooltip="Зменшити кількість">-</button>
<span class="amount">2</span>
<button class="btn-plus" data-tooltip="Збільшити кількість">+</button>
<button class="btn-bought" data-tooltip="Призначити як куплене">Куплено</button>
<button class="btn-remove" data-tooltip="Прибрати товар">x</button>
</li>
<li>
<span class="product-item">Сир</span>
<button class="btn-minus" data-tooltip="Зменшити кількість">-</button>
<span class="amount">1</span>
<button class="btn-plus" data-tooltip="Збільшити кількість">+</button>
<button class="btn-bought" data-tooltip="Призначити як куплене">Куплено</button>
<button class="btn-remove" data-tooltip="Прибрати товар">x</button>
</li> -->
</ul>
</section>

<section class="panel">
<section class="left-items-panel">
<h2>Залишилося</h2>
<ul class="left-list" id="left-list">
<!-- <li class="l-item">Печиво<span class="l-amount">2</span></li>
<li class="l-item">Сир<span class="l-amount">1</span></li> -->
</ul>
</section>

<section class="bought-items-panel">
<h2>Куплено</h2>
<ul class="bought-list" id="bought-list">
<!-- <li class="b-item">Помідори<span class="b-amount">2</span></li> -->
</ul>
</section>
</section>

</main>

<aside class="badge">
<p class="badge-label">Buy List</p>
<p class="badge-author">Created by: Veronika Burmetska</p>
</aside>
<script src="buy-list.js"></script>
</body>
</html>
Loading