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
1 change: 1 addition & 0 deletions Contributors.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@
1. icodejsx
2. ogbon(Segun Amosu)
3. Solomon Eseme
4. Chigozie Mbama (Mykel)

35 changes: 35 additions & 0 deletions week-2/To-do/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>To-Do List</title>
<!-- font-awesome -->
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.14.0/css/all.min.css"
/>
<!-- styles -->
<link rel="stylesheet" href="style.css" />
</head>
<body>
<section class="section-center">
<!-- form -->
<form class="grocery-form">
<p class="alert"></p>
<h3>To-Do List</h3>
<div class="form-control">
<input type="text" id="grocery" placeholder="e.g. coding" />
<button type="submit" class="submit-btn">submit</button>
</div>
</form>
<!-- list -->
<div class="grocery-container">
<div class="grocery-list"></div>
<button class="clear-btn">clear items</button>
</div>
</section>
<!-- javascript -->
<script src="script.js"></script>
</body>
</html>
218 changes: 218 additions & 0 deletions week-2/To-do/script.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
// ****** select items **********

const form = document.querySelector(".grocery-form");
const alert = document.querySelector(".alert");
const grocery = document.getElementById("grocery");
const submitBtn = document.querySelector(".submit-btn");
const container = document.querySelector(".grocery-container");
const list = document.querySelector(".grocery-list");
const clearBtn = document.querySelector(".clear-btn");
// edit option
let editElement;
let editFlag = false;
let editID = "";
// ****** event listeners **********

// submit form
form.addEventListener("submit", addItem);
// clear list
clearBtn.addEventListener("click", clearItems);
// display items onload
window.addEventListener("DOMContentLoaded", setupItems);

// ****** functions **********

// add item
function addItem(e) {
e.preventDefault();
const value = grocery.value;
const id = new Date().getTime().toString();

if (value !== "" && !editFlag) {
const element = document.createElement("article");
let attr = document.createAttribute("data-id");
attr.value = id;
element.setAttributeNode(attr);
element.classList.add("grocery-item");
element.innerHTML = `<p class="title">${value}</p>
<div class="btn-container">
<!-- edit btn -->
<button type="button" class="edit-btn">
<i class="fas fa-edit"></i>
</button>
<!-- delete btn -->
<button type="button" class="delete-btn">
<i class="fas fa-trash"></i>
</button>
</div>
`;
// add event listeners to both buttons;
const deleteBtn = element.querySelector(".delete-btn");
deleteBtn.addEventListener("click", deleteItem);
const editBtn = element.querySelector(".edit-btn");
editBtn.addEventListener("click", editItem);

// append child
list.appendChild(element);
// display alert
displayAlert("item added to the list", "success");
// show container
container.classList.add("show-container");
// set local storage
addToLocalStorage(id, value);
// set back to default
setBackToDefault();
} else if (value !== "" && editFlag) {
editElement.innerHTML = value;
displayAlert("value changed", "success");

// edit local storage
editLocalStorage(editID, value);
setBackToDefault();
} else {
displayAlert("please enter value", "danger");
}
}
// display alert
function displayAlert(text, action) {
alert.textContent = text;
alert.classList.add(`alert-${action}`);
// remove alert
setTimeout(function () {
alert.textContent = "";
alert.classList.remove(`alert-${action}`);
}, 1000);
}

// clear items
function clearItems() {
const items = document.querySelectorAll(".grocery-item");
if (items.length > 0) {
items.forEach(function (item) {
list.removeChild(item);
});
}
container.classList.remove("show-container");
displayAlert("empty list", "danger");
setBackToDefault();
localStorage.removeItem("list");
}

// delete item

function deleteItem(e) {
const element = e.currentTarget.parentElement.parentElement;
const id = element.dataset.id;

list.removeChild(element);

if (list.children.length === 0) {
container.classList.remove("show-container");
}
displayAlert("item removed", "danger");

setBackToDefault();
// remove from local storage
removeFromLocalStorage(id);
}
// edit item
function editItem(e) {
const element = e.currentTarget.parentElement.parentElement;
// set edit item
editElement = e.currentTarget.parentElement.previousElementSibling;
// set form value
grocery.value = editElement.innerHTML;
editFlag = true;
editID = element.dataset.id;
//
submitBtn.textContent = "edit";
}
// set backt to defaults
function setBackToDefault() {
grocery.value = "";
editFlag = false;
editID = "";
submitBtn.textContent = "submit";
}

// ****** local storage **********

// add to local storage
function addToLocalStorage(id, value) {
const grocery = { id, value };
let items = getLocalStorage();
items.push(grocery);
localStorage.setItem("list", JSON.stringify(items));
}

function getLocalStorage() {
return localStorage.getItem("list")
? JSON.parse(localStorage.getItem("list"))
: [];
}

function removeFromLocalStorage(id) {
let items = getLocalStorage();

items = items.filter(function (item) {
if (item.id !== id) {
return item;
}
});

localStorage.setItem("list", JSON.stringify(items));
}
function editLocalStorage(id, value) {
let items = getLocalStorage();

items = items.map(function (item) {
if (item.id === id) {
item.value = value;
}
return item;
});
localStorage.setItem("list", JSON.stringify(items));
}

// SETUP LOCALSTORAGE.REMOVEITEM('LIST');

// ****** setup items **********

function setupItems() {
let items = getLocalStorage();

if (items.length > 0) {
items.forEach(function (item) {
createListItem(item.id, item.value);
});
container.classList.add("show-container");
}
}

function createListItem(id, value) {
const element = document.createElement("article");
let attr = document.createAttribute("data-id");
attr.value = id;
element.setAttributeNode(attr);
element.classList.add("grocery-item");
element.innerHTML = `<p class="title">${value}</p>
<div class="btn-container">
<!-- edit btn -->
<button type="button" class="edit-btn">
<i class="fas fa-edit"></i>
</button>
<!-- delete btn -->
<button type="button" class="delete-btn">
<i class="fas fa-trash"></i>
</button>
</div>
`;
// add event listeners to both buttons;
const deleteBtn = element.querySelector(".delete-btn");
deleteBtn.addEventListener("click", deleteItem);
const editBtn = element.querySelector(".edit-btn");
editBtn.addEventListener("click", editItem);

// append child
list.appendChild(element);
}
Loading