document.addEventListener('DOMContentLoaded', function() { const importForm = document.querySelector('a[href*="action=import"]'); if (importForm) { // This is the start page, no JS needed here for now. } // Logic for the import page const importPage = document.getElementById('import-page-marker'); if (importPage) { const urlParams = new URLSearchParams(window.location.search); const filename = urlParams.get('file'); const delay = parseInt(importPage.dataset.delay || '0'); let start_line = parseInt(urlParams.get('start_line') || '1'); let foffset = parseInt(urlParams.get('foffset') || '0'); let totalqueries = parseInt(urlParams.get('totalqueries') || '0'); let delimiter = urlParams.get('delimiter') || ';'; const progressDiv = document.getElementById('progress'); const messagesDiv = document.getElementById('import_messages'); const linenumberSpan = document.getElementById('linenumber'); const stopButton = document.getElementById('stop_button'); let stopped = false; stopButton.addEventListener('click', (e) => { e.preventDefault(); stopped = true; messagesDiv.innerHTML = '

Import stopped by user.

'; stopButton.style.display = 'none'; }); function makeRequest() { if (stopped) return; const requestUrl = `?action=import&file=${encodeURIComponent(filename)}&start_line=${start_line}&foffset=${foffset}&totalqueries=${totalqueries}&delimiter=${encodeURIComponent(delimiter)}&ajax_request=true`; fetch(requestUrl) .then(response => { if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return response.json(); }) .then(data => { if (data.error) { throw new Error(data.error); } const session_start_line = start_line; start_line = data.linenumber; foffset = data.foffset; totalqueries = data.totalqueries; delimiter = data.delimiter; linenumberSpan.textContent = start_line; updateProgress(data, session_start_line); if (data.finished) { messagesDiv.innerHTML = '

Congratulations: End of file reached, assuming OK

'; stopButton.style.display = 'none'; } else { setTimeout(makeRequest, 500 + delay); // Delay before next request } }) .catch(error => { messagesDiv.innerHTML = `

An error occurred: ${error.message}

`; console.error('Error during import:', error); }); } function updateProgress(data, session_start_line) { const pct_bar = `
`; const filesize_mb = data.filesize > 0 ? (data.filesize / 1024 / 1024).toFixed(2) : '?'; const foffset_mb = data.foffset > 0 ? (data.foffset / 1024 / 1024).toFixed(2) : '?'; progressDiv.innerHTML = `
SessionDoneTotal
Lines${data.linenumber - session_start_line}${data.linenumber}?
Queries${data.queries_processed_session}${data.totalqueries}?
MB${(data.bytes_processed_session/1024/1024).toFixed(2)}${foffset_mb}${filesize_mb}
% bar${pct_bar}
`; } // Start the first request makeRequest(); } });