let taskTypesConfig = null; let selectedTaskTypes = new Set(); document.addEventListener('DOMContentLoaded', () => { initTaskTypes(); }); async function initTaskTypes() { const response = await fetch('/task-types'); taskTypesConfig = await response.json(); renderDropdown(); } function renderDropdown() { const dropdown = document.getElementById('taskTypesDropdown'); dropdown.innerHTML = ''; dropdown.appendChild( createTypeGroup('Классическая вероятность', taskTypesConfig.classic) ); dropdown.appendChild( createTypeGroup('Теоремы вероятности', taskTypesConfig.theorems) ); updateSelectedCount(); } function createTypeGroup(title, types) { const group = document.createElement('div'); group.className = 'type-group'; const header = document.createElement('div'); header.className = 'type-group-title'; header.textContent = title; const tags = document.createElement('div'); tags.className = 'type-tags'; types.forEach(type => { const tag = document.createElement('div'); tag.className = 'type-tag active'; tag.textContent = type.name; tag.dataset.id = type.id; selectedTaskTypes.add(type.id); tag.addEventListener('click', () => { tag.classList.toggle('active'); if (selectedTaskTypes.has(type.id)) { selectedTaskTypes.delete(type.id); } else { selectedTaskTypes.add(type.id); } updateSelectedCount(); }); tags.appendChild(tag); }); group.appendChild(header); group.appendChild(tags); return group; } function selectAllTypes() { document.querySelectorAll('.type-tag').forEach(tag => { tag.classList.add('active'); selectedTaskTypes.add(Number(tag.dataset.id)); }); updateSelectedCount(); } function clearAllTypes() { document.querySelectorAll('.type-tag').forEach(tag => { tag.classList.remove('active'); }); selectedTaskTypes.clear(); updateSelectedCount(); } function updateSelectedCount() { document.getElementById('selectedCount').textContent = `${selectedTaskTypes.size} выбрано`; } function getSelectedTaskTypes() { return Array.from(selectedTaskTypes); } async function generateTasks() { const count = Number(document.getElementById('count').value); const complexity = document.getElementById('complexity').value; const taskTypes = getSelectedTaskTypes(); const loading = document.getElementById('loading'); const error = document.getElementById('error'); const tasksContainer = document.getElementById('tasks-container'); tasksContainer.innerHTML = ''; error.style.display = 'none'; if (taskTypes.length === 0) { error.textContent = 'Выберите хотя бы один тип задач'; error.style.display = 'block'; return; } loading.style.display = 'block'; const response = await fetch('/generate', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ count, complexity, task_types: taskTypes }) }); const data = await response.json(); loading.style.display = 'none'; displayTasks(data.tasks); } function displayTasks(tasks) { const container = document.getElementById('tasks-container'); tasks.forEach((task, index) => { const div = document.createElement('div'); div.className = 'task'; div.innerHTML = `