// Получение элементов из HTML
const taskForm = document.getElementById("task-form");
const taskInput = document.getElementById("task-input");
const taskList = document.getElementById("task-list");
const filterButtons = document.querySelectorAll(".filter");
// Загрузка задач из LocalStorage
let tasks = JSON.parse(localStorage.getItem("tasks")) || [];
// Переменная для отслеживания перетаскиваемой задачи
let draggedTaskIndex = null;
// Функция для отображения задач
function displayTasks(filter = "all") {
taskList.innerHTML = "";
const filteredTasks = tasks.filter(task =>
filter === "all" || (filter === "active" && !task.completed) || (filter === "completed" && task.completed)
);
filteredTasks.forEach((task, index) => {
const taskItem = document.createElement("li");
taskItem.classList.add("task-item");
taskItem.draggable = true; // Сделать элемент перетаскиваемым
if (task.completed) taskItem.classList.add("completed");
taskItem.innerHTML = `
${task.text}
`;
// Добавление событий для drag-and-drop
taskItem.addEventListener("dragstart", () => handleDragStart(index));
taskItem.addEventListener("dragover", (e) => handleDragOver(e));
taskItem.addEventListener("drop", () => handleDrop(index));
taskItem.addEventListener("dragend", handleDragEnd);
taskList.appendChild(taskItem);
});
}
// Обработчик начала перетаскивания
function handleDragStart(index) {
draggedTaskIndex = index;
}
// Обработчик, предотвращающий действия по умолчанию (нужен для drop)
function handleDragOver(e) {
e.preventDefault();
}
// Обработчик окончания перетаскивания
function handleDrop(index) {
if (draggedTaskIndex !== null && draggedTaskIndex !== index) {
const draggedTask = tasks[draggedTaskIndex];
tasks.splice(draggedTaskIndex, 1);
tasks.splice(index, 0, draggedTask);
saveTasks();
displayTasks();
}
draggedTaskIndex = null;
}
// Обработчик окончания перетаскивания
function handleDragEnd() {
draggedTaskIndex = null;
}
// Добавление новой задачи
taskForm.addEventListener("submit", (e) => {
e.preventDefault();
const taskText = taskInput.value.trim();
if (!taskText) return;
const newTask = {
id: Date.now().toString(),
text: taskText,
completed: false
};
tasks.push(newTask);
saveTasks();
displayTasks();
taskInput.value = "";
});
// Переключение статуса задачи на выполнено
function toggleComplete(taskId) {
tasks = tasks.map(task =>
task.id === taskId ? { ...task, completed: !task.completed } : task
);
saveTasks();
displayTasks();
}
// Удаление задачи
function deleteTask(taskId) {
tasks = tasks.filter(task => task.id !== taskId);
saveTasks();
displayTasks();
}
// Сохранение задач в LocalStorage
function saveTasks() {
localStorage.setItem("tasks", JSON.stringify(tasks));
}
// Добавление события для фильтров
filterButtons.forEach(button => {
button.addEventListener("click", () => {
filterButtons.forEach(btn => btn.classList.remove("active"));
button.classList.add("active");
displayTasks(button.dataset.filter);
});
});
// Инициализация
displayTasks();