Загрузка данных


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();