diff --git a/checkmark.svg b/checkmark.svg
new file mode 100644
index 0000000..8738f16
--- /dev/null
+++ b/checkmark.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/index.html b/index.html
index d241b1b..1ef8775 100644
--- a/index.html
+++ b/index.html
@@ -1,5 +1,5 @@
-
+
@@ -8,7 +8,23 @@
-
+
+
+
+
+
Today's To-Do ๐
+
+
โ
: 0 ๐ : 0
+
+
+
+
+
diff --git a/script.js b/script.js
index 355dcc2..80b5b57 100644
--- a/script.js
+++ b/script.js
@@ -1 +1,143 @@
//๐CEOS 20๊ธฐ ํ๋ก ํธ์๋ ํ์ดํ
๐
+
+document.addEventListener("DOMContentLoaded", function () {
+ const today = new Date(); // ํ์ฌ ๋ ์ง์ ์๊ฐ์ ๊ฐ์ ธ์ค๋ Date ๊ฐ์ฒด
+ const options = { month: "long", day: "numeric", weekday: "long" };
+ // ๋ ์ง, ์์ผ ๋ฑ ํฌ๋งท ์ month์ weekday๋ ๊ธด ํ์์ผ๋ก (9์, ๋ชฉ์์ผ) day๋ ์ซ์ ํ์ (5, 25)
+
+ const formattedDate = today.toLocaleDateString("ko-KR", options); // options ํ์์ ํ๊ตญ์ด ๋ ์ง
+ document.querySelector(".date").textContent = formattedDate;
+ // .Date ์์์ textcontent๋ฅผ formattedDate์ผ๋ก ์ค์
+
+ const todoInput = document.querySelector("input"); // input ์์ ๊ฐ์ง๊ณ ์ค๊ธฐ
+ const todoBox = document.querySelector(".todoBox"); // class๊ฐ .todo-box์ธ ์์๋ฅผ ๊ฐ์ง๊ณ ์ค๊ธฐ
+ const submitBtn = document.getElementById("submitBtn"); // id๊ฐ submitbtn์ธ ์์๋ฅผ ๊ฐ์ง๊ณ ์ค๊ธฐ
+ const completedCountElem = document.querySelector(".completedCount"); // ์๋ฃ๋ todo ์๋ฅผ ์
์์
+ const totalCountElem = document.querySelector(".totalCount"); // ์ ์ฒด todo ์๋ฅผ ์
์์
+
+ let todoList = []; // ๋ก์ปฌ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋ todo ๋ฐฐ์ด
+
+ function setting() {
+ loadStorage(); // localStorage์ ์ ์ฅ๋ todoList์ todo๋ค ๋ถ๋ฌ์ค๊ธฐ
+ submitBtn.addEventListener("click", function (event) {
+ event.preventDefault(); // input์ ๊ฐ ์
๋ ฅ ํ ์ถ๊ฐ ๋ฒํผ์ ๋๋ฌ๋ ์๋ก๊ณ ์นจ ๋์ง ์๋๋ก.
+ createList();
+ });
+ }
+
+ function createList() {
+ const newTodo = todoInput.value.trim(); // ๋ฌธ์์ด ์ ๋ค ๊ณต๋ฐฑ์ ์ ๊ฑฐํ๋ trim์ ์ด์ฉ, ์ฌ์ฉ์๊ฐ input์ ์
๋ ฅํ todo๋ฅผ ์ ์ฅ
+ if (newTodo === ""){
+ alert('์ค๋์ ํ ์ผ์ ์ ์ด์ฃผ์ธ์!๐');
+ return; // ์ฌ์ฉ์๊ฐ ์
๋ ฅํ์ง ์์์ผ๋ฉด ํจ์ ์ข
๋ฃ
+ }
+ // ์ด๋ฏธ ๊ฐ์ ๋ด์ฉ์ ํฌ๋๊ฐ ์๋์ง ํ์ธ
+
+ const isDuplicate = todoList.some((todo) => todo.text === newTodo); //some ๋ฉ์๋, ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ์ํํ๋ฉด์, ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์๊ฐ ํ๋๋ผ๋ ์์ผ๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์๊ฐ ์์ผ๋ฉด false๋ฅผ ๋ฐํ
+ if (isDuplicate) {
+ alert("์ด๋ฏธ ๋์ผํ ํฌ๋๊ฐ ์์ต๋๋ค!๐๐ป"); // ์๋ฆผ์ฐฝ์ผ๋ก ์ค๋ณต ํฌ๋ ์๋ฆผ
+ todoInput.value = "";
+ return; // ์ค๋ณต๋๋ฉด ํจ์ ์ข
๋ฃ
+ }
+
+ todoList.push({ text: newTodo, completed: false }); // ๋ฐฐ์ด์ ์
๋ ฅ ๊ฐ ์ ์ฅ
+ saveStorage(); // list์ ์๋ก์ด todo๊ฐ ์ถ๊ฐ ๋จ์ผ๋ก์จ ๋ณ๊ฒฝ๋์์ผ๋ ๋ค์ localStorage์ todoList ์ ์ฅ
+ displayTodo(newTodo, false);
+ todoInput.value = ""; // ๋ฐฐ์ด์ todo๋ฅผ ์ ์ฅํ๊ณ ๋ ๋๋ง ํ๋ค๋ฉด input์ ์ง์์ ๋ค์ ์
๋ ฅํ ์ ์๋๋ก
+ updateCounts(); // ์ ์ฒด todo ๊ฐ์์ +1
+ }
+
+ function saveStorage() {
+ localStorage.setItem("todos", JSON.stringify(todoList)); //localStorage๋ ๋ฌธ์์ด ํ์์ ๋ฐ์ดํฐ๋ง ์ ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์, JSON.stringify()๋ฅผ ์ฌ์ฉํด ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ JSON ๋ฌธ์์ด๋ก ๋ณํํ ํ ์ ์ฅ. ๋ค์ ๋ถ๋ฌ์ฌ ๋๋ JSON.parse() ์ด์ฉ
+ } // setItem(key,value) ํน์ key์ ํด๋น value ํ ๋น
+
+ function loadStorage() {
+ const storedTodos = localStorage.getItem("todos"); // ๊ธฐ์กด์ localStorage์ ์ ์ฅ๋์ด์๋ ๋ฐฐ์ด์ ๋ถ๋ฌ์ค๊ธฐ, ๋ง์ฝ ์๋ค๋ฉด null์ด ์ ์ฅ ๋จ
+ if (storedTodos) {
+ todoList = JSON.parse(storedTodos);
+ todoList.forEach((todo) => displayTodo(todo.text, todo.completed)); // todoList ๋ฐฐ์ด์ ์ํํ๋ฉฐ ์ ์ฅ๋ ๋ชจ๋ todo๋ฅผ ํ๋ฉด์ ๋ ๋๋ง
+ }
+ updateCounts(); // ์๋ก ๊ณ ์นจ ์ ๊ธฐ์กด todoList ๋ฐฐ์ด ๋ถ๋ฌ์์ ์ด ๊ฐ์ ๋ง๊ฒ ๋ ๋๋ง
+ }
+
+ function displayTodo(todoText, isCompleted) {
+ const li = document.createElement("li"); // ์๋ก์ด ์์ ์์ฑ. ํ๋์ todo๋ฅผ ๋ํ๋
+
+ const checkbox = document.createElement("input"); // ์๋ก์ด input ์์ checkbox ์์ฑ
+ checkbox.type = "checkbox"; // ์ด ์์์ type = checkbox
+ checkbox.classList.add("todoCheckBox"); // ์คํ์ผ๋ง์ ์ํด ํด๋์ค ๋ชฉ๋ก์ ํด๋์ค ์ด๋ฆ ์ถ๊ฐ! ์ฆ checkbox์ ํ ๋น๋๋ ํด๋์ค ์ด๋ฆ์ด todo-checkbox
+ checkbox.checked = isCompleted; // isCompleted๊ฐ true๋ผ๋ฉด checkbox๊ฐ ์ฒดํฌ ๋จ
+
+ checkbox.addEventListener("change", function () { // checkbox์ ์ํ๊ฐ ๋ฐ๋ ๋, ์ฆ checked์ ์์ฑ์ด ๋ณ๊ฒฝ๋ ๋ (์ฌ์ฉ์๊ฐ ์ฒดํฌ๋ฐ์ค๋ฅผ ์ฒดํฌํ๊ฑฐ๋ ํด์ ํ ๋) ์คํ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ
+ toggleTodoCompletion(todoText);
+ li.querySelector("span").style.textDecoration = checkbox.checked ? "line-through" : "none";
+ }); // ์์์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ฐพ์ ์คํ์ผ๋ง. ๋ง์ฝ ์ฒดํฌ๋ฐ์ค๊ฐ ์ฒดํฌ ๋์ด์์ผ๋ฉด? ์ ์ ๊ธ๊ณ ํด์ ๋์ด ์์ผ๋ฉด ์ ์ ์์ค๋ค!
+
+ const todoSpan = document.createElement("span"); // ์์ ์์ ์ฐ์ฌ์ง ํ
์คํธ๋ฅผ ์์๋ก ์ค์
+ todoSpan.classList.add("todoSpan");
+ todoSpan.textContent = todoText; // ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ ๋ฐ์ input์ text๋ฅผ ๋ณ์ todoSpan์ ํ
์คํธ ๋ด์ฉ์ผ๋ก ์ ์ฅ
+ if (isCompleted) {
+ todoSpan.style.textDecoration = "line-through";
+ }
+
+ const deleteBtn = document.createElement("button"); // ์๋ก์ด