async function handleDockerFormSubmit(event) { event.preventDefault(); // Prevent the form from submitting the traditional way const submitButton = document.getElementById('docker-submit-button'); const messageDiv = document.getElementById('docker-message'); const progressBar = document.getElementById('progress-bar'); submitButton.disabled = true; // Disable the submit button messageDiv.textContent = "Downloading Docker image..."; // Show downloading message messageDiv.style.display = 'block'; const form = event.target; const imageName = form.image_name.value; const tag = form.tag.value; try { const response = await fetch(`/download-docker-image?image_name=${imageName}&tag=${tag}`); if (response.ok) { const reader = response.body.getReader(); const contentLength = response.headers.get('content-length'); const total = parseInt(contentLength, 10); let loaded = 0; const stream = new ReadableStream({ start(controller) { function push() { reader.read().then(({ done, value }) => { if (done) { controller.close(); updateProgress(progressBar, messageDiv, total, total); return; } loaded += value.length; updateProgress(progressBar, messageDiv, loaded, total); controller.enqueue(value); push(); }).catch(error => { console.error('Error:', error); messageDiv.textContent = "Error downloading image."; }); } push(); } }); const blob = await new Response(stream).blob(); const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.style.display = 'none'; a.href = url; a.download = `${imageName.replace("/", "_")}.tar`; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); } else if (response.status === 404) { throw new Error('Image not found'); } else { throw new Error('Download failed'); } } catch (error) { console.error('Error:', error); if (error.message === 'Image not found') { messageDiv.textContent = "Error: Docker image not found."; // Show not found message } else { messageDiv.innerHTML = "Error downloading image.
Check the image name and tag."; // Show error message in two lines } } finally { submitButton.disabled = false; // Re-enable the submit button after download } } // async function handlePipFormSubmit(event) { // event.preventDefault(); // Prevent the form from submitting the traditional way // const submitButton = document.getElementById('pip-submit-button'); // const messageDiv = document.getElementById('pip-message'); // const progressBar = document.getElementById('progress-bar'); // const progressContainer = document.getElementById('progress-container'); // submitButton.disabled = true; // Disable the submit button // messageDiv.textContent = "Downloading dependencies..."; // Show downloading message // messageDiv.style.display = 'block'; // progressContainer.style.display = 'block'; // progressBar.style.width = '0%'; // Reset progress bar // const formData = new FormData(event.target); // try { // const response = await fetch('/download-dependencies', { // method: 'POST', // body: formData // }); // if (response.ok) { // const reader = response.body.getReader(); // const contentLength = response.headers.get('content-length'); // const total = parseInt(contentLength, 10); // let loaded = 0; // const stream = new ReadableStream({ // start(controller) { // function push() { // reader.read().then(({ done, value }) => { // if (done) { // controller.close(); // updateProgress(progressBar, messageDiv, total, total); // return; // } // loaded += value.length; // updateProgress(progressBar, messageDiv, loaded, total); // controller.enqueue(value); // push(); // }).catch(error => { // console.error('Error:', error); // messageDiv.textContent = "Error downloading dependencies."; // }); // } // push(); // } // }); // const blob = await new Response(stream).blob(); // const url = window.URL.createObjectURL(blob); // const a = document.createElement('a'); // a.style.display = 'none'; // a.href = url; // a.download = 'dependencies.tar.gz'; // document.body.appendChild(a); // a.click(); // window.URL.revokeObjectURL(url); // } else { // const errorMessage = await response.text(); // throw new Error(errorMessage || 'Download failed'); // } // } catch (error) { // console.error('Error:', error); // messageDiv.innerHTML = "Error downloading dependencies.
Please try again."; // } finally { // submitButton.disabled = false; // Re-enable the submit button after download // } // } // async function handlePipFormSubmit(event) { // event.preventDefault(); // Prevent the form from submitting the traditional way // const submitButton = document.getElementById('pip-submit-button'); // const messageDiv = document.getElementById('pip-message'); // const progressBar = document.getElementById('progress-bar'); // const progressContainer = document.getElementById('progress-container'); // submitButton.disabled = true; // Disable the submit button // messageDiv.textContent = "Downloading dependencies..."; // Show downloading message // messageDiv.style.display = 'block'; // progressContainer.style.display = 'block'; // progressBar.style.width = '0%'; // Reset progress bar // const formData = new FormData(event.target); // try { // const response = await fetch('/download-dependencies', { // method: 'POST', // body: formData // }); // if (response.ok) { // const reader = response.body.getReader(); // const contentLength = response.headers.get('content-length'); // const total = contentLength ? parseInt(contentLength, 10) : null; // let loaded = 0; // if (!total) { // // Handle case where content-length is not provided // messageDiv.textContent = "Warning: Content length is not provided."; // } // const stream = new ReadableStream({ // start(controller) { // function push() { // reader.read().then(({ done, value }) => { // if (done) { // controller.close(); // if (total) { // updateProgress(progressBar, messageDiv, total, total); // } else { // messageDiv.textContent = "Download complete!"; // } // return; // } // loaded += value.length; // if (total) { // updateProgress(progressBar, messageDiv, loaded, total); // } // controller.enqueue(value); // push(); // }).catch(error => { // console.error('Error:', error); // messageDiv.textContent = "Error downloading dependencies."; // }); // } // push(); // } // }); // const blob = await new Response(stream).blob(); // const url = window.URL.createObjectURL(blob); // const a = document.createElement('a'); // a.style.display = 'none'; // a.href = url; // a.download = 'dependencies.tar.gz'; // document.body.appendChild(a); // a.click(); // window.URL.revokeObjectURL(url); // } else { // throw new Error('Download failed'); // } // } catch (error) { // console.error('Error:', error); // messageDiv.innerHTML = "Error downloading dependencies.
Please try again."; // } finally { // submitButton.disabled = false; // Re-enable the submit button after download // } // } async function handlePipFormSubmit(event) { event.preventDefault(); // Prevent the form from submitting the traditional way const submitButton = document.getElementById('pip-submit-button'); const messageDiv = document.getElementById('pip-message'); const progressBar = document.getElementById('progress-bar'); const progressContainer = document.getElementById('progress-container'); submitButton.disabled = true; // Disable the submit button messageDiv.textContent = "Downloading dependencies..."; // Show downloading message messageDiv.style.display = 'block'; progressContainer.style.display = 'block'; progressBar.style.width = '0%'; // Reset progress bar const formData = new FormData(event.target); try { const response = await fetch('/download-dependencies', { method: 'POST', body: formData }); if (response.ok) { const reader = response.body.getReader(); const contentLength = response.headers.get('content-length'); const total = contentLength ? parseInt(contentLength, 10) : null; let loaded = 0; const stream = new ReadableStream({ start(controller) { function push() { reader.read().then(({ done, value }) => { if (done) { controller.close(); if (total) { updateProgress(progressBar, messageDiv, total, total); } else { messageDiv.textContent = "Download complete!"; } return; } loaded += value.length; if (total) { updateProgress(progressBar, messageDiv, loaded, total); } controller.enqueue(value); push(); }).catch(error => { console.error('Error:', error); messageDiv.textContent = "Error downloading dependencies."; }); } push(); } }); const blob = await new Response(stream).blob(); const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.style.display = 'none'; a.href = url; a.download = 'dependencies.tar.gz'; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); } else { throw new Error('Download failed'); } } catch (error) { console.error('Error:', error); messageDiv.innerHTML = "Error downloading dependencies.
Please try again."; } finally { submitButton.disabled = false; // Re-enable the submit button after download } } function updateProgress(progressBar, messageDiv, loaded, total) { if (total > 0) { const percent = Math.round((loaded / total) * 100); progressBar.style.width = `${percent}%`; progressBar.textContent = `${percent}%`; if (percent >= 100) { messageDiv.textContent = "Download complete!"; messageDiv.style.display = 'block'; } } else { progressBar.style.width = '0%'; progressBar.textContent = '0%'; } } function openTab(event, tabName) { const tabContents = document.getElementsByClassName("tabcontent"); for (let i = 0; i < tabContents.length; i++) { tabContents[i].style.display = "none"; } const tabLinks = document.getElementsByClassName("tablink"); for (let i = 0; i < tabLinks.length; i++) { tabLinks[i].className = tabLinks[i].className.replace(" active", ""); } document.getElementById(tabName).style.display = "block"; event.currentTarget.className += " active"; } window.onload = () => { document.getElementById("defaultOpen").click(); // Open the default tab };