// PDF Tools - JavaScript Functionality let pdfToolsFiles = []; let mergeSortable = null; let currentPdfFile = null; // DOM elements let mergeUploadArea, mergeFileInput, mergeFileList, mergeFilesContainer, mergePdfsBtn; let splitUploadArea, splitFileInput, splitFileInfo, convertToImagesBtn; let mergeResult, splitResult, mergeDownloadLink, splitDownloadLink; let processingModal, errorArea, errorMessage; // Initialize when page loads document.addEventListener('DOMContentLoaded', function() { initializeDOMElements(); setupEventListeners(); setupDragAndDrop(); }); function initializeDOMElements() { // Merge elements mergeUploadArea = document.getElementById('merge-upload-area'); mergeFileInput = document.getElementById('merge-file-input'); mergeFileList = document.getElementById('merge-file-list'); mergeFilesContainer = document.getElementById('merge-files-container'); mergePdfsBtn = document.getElementById('merge-pdfs-btn'); mergeResult = document.getElementById('merge-result'); mergeDownloadLink = document.getElementById('merge-download-link'); // Split elements splitUploadArea = document.getElementById('split-upload-area'); splitFileInput = document.getElementById('split-file-input'); splitFileInfo = document.getElementById('split-file-info'); convertToImagesBtn = document.getElementById('convert-to-images-btn'); splitResult = document.getElementById('split-result'); splitDownloadLink = document.getElementById('split-download-link'); // Common elements processingModal = new bootstrap.Modal(document.getElementById('processing-modal')); errorArea = document.getElementById('pdf-tools-error'); errorMessage = document.getElementById('pdf-tools-error-message'); } function setupEventListeners() { // Merge PDF events mergeFileInput.addEventListener('change', function(e) { handleMergeFiles(Array.from(e.target.files)); }); mergeUploadArea.addEventListener('click', function() { mergeFileInput.click(); }); mergePdfsBtn.addEventListener('click', mergePdfs); // Split PDF events splitFileInput.addEventListener('change', function(e) { if (e.target.files.length > 0) { handleSplitFile(e.target.files[0]); } }); splitUploadArea.addEventListener('click', function() { splitFileInput.click(); }); convertToImagesBtn.addEventListener('click', convertPdfToImages); // Tab change events document.querySelectorAll('[data-bs-toggle="pill"]').forEach(tab => { tab.addEventListener('shown.bs.tab', function(e) { hideAllResults(); }); }); } function setupDragAndDrop() { // Merge area drag and drop setupDragAndDrop(mergeUploadArea, handleMergeFiles); // Split area drag and drop setupDragAndDrop(splitUploadArea, function(files) { if (files.length > 0) { handleSplitFile(files[0]); } }); } // Merge PDF functions async function handleMergeFiles(files) { hideAllResults(); if (!files || files.length === 0) { showError('Keine Dateien ausgewählt.'); return; } // Filter PDF files const pdfFiles = files.filter(file => file.type === 'application/pdf'); if (pdfFiles.length === 0) { showError('Keine PDF-Dateien gefunden.'); return; } if (pdfFiles.length < 2) { showError('Mindestens 2 PDF-Dateien erforderlich.'); return; } // Upload files one by one pdfToolsFiles = []; for (const file of pdfFiles) { try { const response = await uploadSinglePdf(file); if (response.success) { pdfToolsFiles.push(response); } } catch (error) { showError(`Fehler beim Upload von ${file.name}: ${error.message}`); return; } } displayMergeFiles(); showNotification(`${pdfToolsFiles.length} PDF-Dateien erfolgreich hochgeladen.`, 'success'); } async function uploadSinglePdf(file) { const formData = new FormData(); formData.append('file', file); const response = await fetch('/api/upload-pdf', { method: 'POST', body: formData }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return await response.json(); } function displayMergeFiles() { mergeFilesContainer.innerHTML = ''; pdfToolsFiles.forEach((file, index) => { const fileItem = createMergeFileItem(file, index); mergeFilesContainer.appendChild(fileItem); }); mergeFileList.style.display = 'block'; mergePdfsBtn.disabled = pdfToolsFiles.length < 2; // Setup sortable setupMergeSortable(); } function createMergeFileItem(file, index) { const div = document.createElement('div'); div.className = 'list-group-item'; div.dataset.index = index; div.innerHTML = `