const columns = [...document.querySelectorAll('.column')];
const tasks = [...document.querySelectorAll('.task')];
const announcement = document.querySelector('#announcement');
let draggedTask = null;
let suppressClickUntil = 0;
function updateCounts() {
columns.forEach(column => {
column.querySelector('.count').textContent = column.querySelectorAll('.task').length;
});
}
function moveTask(task, column) {
if (task.closest('.column') === column) return;
column.querySelector('.task-list').append(task);
updateCounts();
const destination = column.dataset.status === 'done' ? 'Готово' : 'Активные';
announcement.textContent = `«${task.textContent}» перемещена в «${destination}».`;
}
function clearDrag() {
tasks.forEach(task => task.classList.remove('dragging'));
columns.forEach(column => column.classList.remove('drag-over'));
draggedTask = null;
}
tasks.forEach(task => {
task.addEventListener('dragstart', event => {
draggedTask = task;
event.dataTransfer.setData('text/plain', task.id);
event.dataTransfer.effectAllowed = 'move';
task.classList.add('dragging');
});
task.addEventListener('dragend', () => {
suppressClickUntil = Date.now() + 250;
clearDrag();
});
// Нажатие работает на телефоне и с клавиатуры (Enter / пробел).
task.addEventListener('click', () => {
if (Date.now() < suppressClickUntil || draggedTask) return;
const otherColumn = columns.find(column => column !== task.closest('.column'));
moveTask(task, otherColumn);
task.focus();
});
});
columns.forEach(column => {
column.addEventListener('dragover', event => {
if (!draggedTask) return;
event.preventDefault();
event.dataTransfer.dropEffect = 'move';
column.classList.add('drag-over');
});
column.addEventListener('dragleave', event => {
if (!column.contains(event.relatedTarget)) column.classList.remove('drag-over');
});
column.addEventListener('drop', event => {
if (!draggedTask) return;
event.preventDefault();
moveTask(draggedTask, column);
suppressClickUntil = Date.now() + 250;
clearDrag();
});
});
updateCounts();