[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/B-Red/JavaScript-Task-List/master/app.js [Back]  [Original]

//Define the UI vars
const form = document.querySelector('#task-form');
const taskList = document.querySelector('.collection');
const clearBtn = document.querySelector('.clear-tasks');
const filter = document.querySelector('#filter');
const taskInput = document.querySelector('#task');

//Load all event listeners call
loadEventListeners();

//Load all event listeners function
function loadEventListeners() {
    //DOM Load event
    document.addEventListener('DOMContentLoaded', getTasks);
    //Add task event
    form.addEventListener('submit', addTask);
    //Remove task event
    taskList.addEventListener('click', removeTask);
    //Clear all tasks event
    clearBtn.addEventListener('click', clearTasks);
    //Filter tasks event
    filter.addEventListener('keyup', filterTasks);
}

//Get Tasks from Local Storage
function getTasks() {
    let tasks;
    if (localStorage.getItem('tasks') === null) {
        tasks = [];
    } else {
        tasks = JSON.parse(localStorage.getItem('tasks'));
    }

    tasks.forEach(function(task) {
        const li = document.createElement('li');

        li.className = 'collection-item';

        li.appendChild(document.createTextNode(task));

        const link = document.createElement('a');

        link.className = 'delete-item secondary-content';

        link.innerHTML = '';

        li.appendChild(link);

        taskList.appendChild(li);
    });
}

//Add task function
function addTask(e) {
    //Verify if there is a task to add
    if (taskInput.value === '') {
        alert('Add a task');
    }
    //Create li element
    const li = document.createElement('li');
    //Add a class
    li.className = 'collection-item';
    //Create text node and append to li
    li.appendChild(document.createTextNode(taskInput.value));
    //Create new link element
    const link = document.createElement('a');
    //Add class to link element
    link.className = 'delete-item secondary-content';
    //Add icon html
    link.innerHTML = '';
    //Append the link to the li
    li.appendChild(link);

    //Append the li to the ul
    taskList.appendChild(li);

    //Store in the tasks in Local Storage
    storeTaskInLocalStorage(taskInput.value);

    //Clear the input
    taskInput.value = '';

    e.preventDefault();
}

//Store tasks to local storage function
function storeTaskInLocalStorage(task) {
    let tasks;
    if (localStorage.getItem('tasks') === null) {
        tasks = [];
    } else {
        tasks = JSON.parse(localStorage.getItem('tasks'));
    }

    tasks.push(task);

    localStorage.setItem('tasks', JSON.stringify(tasks));
}

//Remove Task function
function removeTask(e) {
    //Check if the target to remove is the correct target
    if (e.target.parentElement.classList.contains('delete-item')) {
        if (confirm('Are you sure?')) {
            //Select the targeted li by bubbling up twice out of the i element
            e.target.parentElement.parentElement.remove();

            //Remove from local storage
            removeTaskFromLocalStorage(e.target.parentElement.parentElement);
        }
    }
}

//Remove from local storage function
function removeTaskFromLocalStorage(taskItem) {
    //Get Tasks from Local Storage
    let tasks;
    if (localStorage.getItem('tasks') === null) {
        tasks = [];
    } else {
        tasks = JSON.parse(localStorage.getItem('tasks'));
    }

    tasks.forEach(function(task, index) {
        if (taskItem.textContent === task) {
            tasks.splice(index, 1);
        }
    });

    localStorage.setItem('tasks', JSON.stringify(tasks));
}

//Clear Tasks function
function clearTasks() {
    //Loop through and remove each child
    while (taskList.firstChild) {
        taskList.removeChild(taskList.firstChild);
    }

    //Clear tasks from local storage
    clearTasksFromLocalStorage();
}

//Clear tasks from local storage function
function clearTasksFromLocalStorage() {
    localStorage.clear();
}
//Filter tasks function
function filterTasks(e) {
    //Set the target to lowercase and grab the text from the input
    const text = e.target.value.toLowerCase();

    document.querySelectorAll('.collection-item').forEach(function(task) {
        const item = task.firstChild.textContent;
        if (item.toLowerCase().indexOf(text) != -1) {
            task.style.display = 'block';
        } else {
            task.style.display = 'none';
        }
    });
}

Web Proxy Viewer  |  New URL  |  Original Page