DEV Community

No Framework - Eps#0: Don't-Do List

Greetings, companions who find solace in the symphony of keyboard strokes! Today, I embark on a new series in the realm of the Street Community Programmer blog, titled "No Framework." I aim to craft a narrative that unfolds into a simplistic and accessible application without the reliance on frameworks. A touch of whimsy graces this endeavor, for it would be indeed humorous if, under the banner of "No Framework," I were to inadvertently employ one. The potential for such a paradoxical occurrence could indeed elicit a bemused smile.

I shall undertake the creation of a "Don't-Do List App," an endeavor encapsulated within a single .html file, woven with the threads of CSS and JavaScript.

Immersed in the Essence

The nomenclature bestowed upon this segment rests entirely within the bounds of my prerogative!

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f0f0f0;
            margin: 0;
            padding: 0;
        }

        .container {
            max-width: 400px;
            margin: 20px auto;
            padding: 20px;
            background-color: #fff;
            box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
        }

        h1 {
            text-align: center;
        }

        input[type="text"] {
            display: block;
            width: 90%;
            padding: 10px;
            margin: 10px auto;
        }

        button {
            display: block;
            margin: 10px auto;
            width: 100%;
            padding: 10px;
            background-color: #007BFF;
            color: #fff;
            border: none;
            cursor: pointer;
        }

        ul {
            list-style-type: none;
            padding: 0;
        }

        li {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding: 10px;
            border-bottom: 1px solid #ccc;
        }

        button.deleteButton {
            background-color: #FF4444;
            width: 30%;
        }
    </style>
    <title>Don't-Do List App</title>
</head>
<body>
    <div class="container">
        <h1>Don't-Do List</h1>
        <input type="text" id="taskInput" placeholder="Add a new task">
        <button id="addButton">Add</button>
        <ul id="taskList"></ul>
    </div>
    <script>
        const taskInput = document.getElementById('taskInput');
        const addButton = document.getElementById('addButton');
        const taskList = document.getElementById('taskList');

        addButton.addEventListener('click', addTask);

        function addTask() {
            const taskText = taskInput.value;
            if (taskText) {
                const listItem = document.createElement('li');
                listItem.innerHTML = `
                    <span>${taskText}</span>
                    <button class="deleteButton">Delete</button>
                `;
                taskList.appendChild(listItem);
                taskInput.value = '';

                const deleteButton = listItem.querySelector('.deleteButton');
                deleteButton.addEventListener('click', deleteTask);
            }
        }

        function deleteTask(event) {
            const listItem = event.target.parentElement;
            taskList.removeChild(listItem);
        }
    </script>
</body>
</html>
Enter fullscreen mode Exit fullscreen mode

The Troupe of Artistry

The makeup artists poised before the grand stage.

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

    .container {
        max-width: 400px;
        margin: 20px auto;
        padding: 20px;
        background-color: #fff;
        box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
    }

    h1 {
        text-align: center;
    }

    input[type="text"] {
        display: block;
        width: 90%;
        padding: 10px;
        margin: 10px auto;
    }

    button {
        display: block;
        margin: 10px auto;
        width: 100%;
        padding: 10px;
        background-color: #007bff;
        color: #fff;
        border: none;
        cursor: pointer;
    }

    ul {
        list-style-type: none;
        padding: 0;
    }

    li {
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding: 10px;
        border-bottom: 1px solid #ccc;
    }

    button.deleteButton {
        background-color: #ff4444;
        width: 30%;
    }
</style>
Enter fullscreen mode Exit fullscreen mode

Ahahaha, a playful jest indeed!

Another Ensemble You Know Well

The active mechanics are, as rumored, poised to be extracted from the browser! An endeavor considered unattainable, dear friend!

<script>
    const taskInput = document.getElementById("taskInput");
    const addButton = document.getElementById("addButton");
    const taskList = document.getElementById("taskList");

    addButton.addEventListener("click", addTask);

    function addTask() {
        const taskText = taskInput.value;
        if (taskText) {
            const listItem = document.createElement("li");
            listItem.innerHTML = `
                    <span>${taskText}</span>
                    <button class="deleteButton">Delete</button>
                `;
            taskList.appendChild(listItem);
            taskInput.value = "";

            const deleteButton = listItem.querySelector(".deleteButton");
            deleteButton.addEventListener("click", deleteTask);
        }
    }

    function deleteTask(event) {
        const listItem = event.target.parentElement;
        taskList.removeChild(listItem);
    }
</script>
Enter fullscreen mode Exit fullscreen mode

The Magnum Opus

<button id="addButton">Add</button>
<ul id="taskList"></ul>
Enter fullscreen mode Exit fullscreen mode

Goto Space ๐Ÿš€

There you have it, a journey complete! Undoubtedly facile, wouldn't you say? The baton now passes to you, dear reader, to seize the limelight and share your creations to be woven into a tapestry that transcends judgment and shall sizzle in the crucible of creativity!

Top comments (0)