JS To Do List

JS To Do List
``` <!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>

    <style>
        body {
            background-color: #f0f0f0;
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 20px;
        }

        h1 {
            max-width: 700px;
            margin: 0 auto 20px auto;
        }

        /* Kontener na formularz i listę */
        .container {
            background-color: #fff;
            border-radius: 10px;
            padding: 20px;
            padding-left: 40px;
            max-width: 700px;
            margin: 0 auto;
            box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
        }

        form#todoForm {
            display: flex;
            width: 85%;
            margin-bottom: 20px;
        }

        form#todoForm input[type="text"] {
            flex: 1;
            padding: 10px;
            font-size: 1rem;
            border: 2px solid #ccc;
            border-radius: 5px;
            outline: none;
            margin-right: 10px;
        }

        form#todoForm button#btnSubmit {
            padding: 10px 20px;
            background-color: rgb(44, 44, 220);
            color: white;
            border: none;
            border-radius: 5px;
            font-size: 1rem;
        }

        button.remove {
            /* margin-left: 15px; */
            margin: 8px;
            background: red;
            color: white;
            border-color: rgb(225, 15, 15);
            padding: 5px 8px;
            border-radius: 5px;
        }

        li.done {
            text-decoration: line-through;
            color: gray;
        }
    </style>
</head>

<body>

    <body>
        <h1>Lista zadań</h1>
        <div class="container">
            <!-- Utworzenie formularza -->
            <form id="todoForm">
                <input type="text" id="todoInput" required placeholder="Wpisz zadanie">
                <button type="submit" id="btnSubmit">Dodaj</button>
            </form>
            <!-- Utworzneie listy nienumerowanej, do ktorej beda dodawane zadania -->
            <ul id="todoList"></ul>
        </div>

        <script>
            // Złapanie elementów
            const form = document.getElementById("todoForm");
            const input = document.getElementById("todoInput");
            const unorderedList = document.getElementById("todoList");
            // Dodawanie zadania do listy
            //1. utworzenie event listnera
            form.addEventListener("submit", (event) => {
                event.preventDefault(); // zatrzymuje przeładowanie strony
                const text = input.value.trim(); //pobieramy tekst z inputu od uzytkownika i obcinamy spacje z poczatku i konca zdania
                //jeśli text bedzie pusty → return (kończymy funkcję od razu).
                if (text.length === 0) {
                    return
                }
                //jeśli text nie będzie pusty to kod ma iść dalej-> ma wpisac ten tekst na listę 
                // Tworzymy nowy <li>.
                // Wkładamy do niego tekst.
                // Dodajemy go do <ul>
                //Przy dodaniu pozycji do listy ma się dynamicznie otworzyć button "usun"
                const listSubitem = document.createElement("li"); //tworzy nowy element HTML typu <li>
                listSubitem.innerText = text; //wkładamy tekst od tego elementu
                unorderedList.appendChild(listSubitem); //dodajemy włozony tekst do pozycji na unordered list
                input.value = ""; //czyscimy pole po dodaniu zadania

                //button "USUN"
                const removeButton = document.createElement("button"); //tworzymy nowy element HTML <button> w pamięci przeglądarki
                removeButton.innerText = "Usuń"; //ustawiamy tekst wewnątrz przycisku
                removeButton.className = "remove";//przypisanie klasy w JS dla dynamicznego elementu

                listSubitem.appendChild(removeButton); // Dodajemy przycisk do pozycji listy

                // Usunięcie zadania potwierdzone monitem czy na pewno chcesz usunąć
                removeButton.addEventListener("click", (event) => {
                    const confirmMessage = confirm("Na pewno chcesz usunąć to zadanie?");//funkcja confirm zwraca true, jeśli użytkownik kliknie „OK”, lub false, jeśli kliknie „Anuluj”.
                    if (confirmMessage) {
                        listSubitem.remove(); //jesli kliknał OK to usuwamy pozycje z listy
                    }
                })
                // oznaczenie zadania jako wykonane poprzez klikniecie na nie
                listSubitem.addEventListener("click", (event) => {
                    // jeśli kliknięto w przycisk "Usuń", to nic nie rób
                    if (event.target.classList.contains("remove")) {
                        return;
                    }
                    if (listSubitem.classList.contains("done")) {
                        // jeżeli już miało klasę "done", to usuwamy (odkliknięcie)
                        listSubitem.classList.remove("done");
                    } else {
                        // jeżeli nie miało, to dodajemy klasę i dopiero teraz odpalamy event
                        listSubitem.classList.add("done");

                        const completedEvent = new CustomEvent("taskCompleted");
                        listSubitem.dispatchEvent(completedEvent);
                    }
                });

                // Nasłuchujemy na to zdarzenie i wyswietlamy komunikat
                listSubitem.addEventListener("taskCompleted", (event) => {
                    console.log("zadanie ukończone!");
                });

            })


        </script>

</html>