// document.addEventListener('DOMContentLoaded', function() { // fetch('list_data/get_upload_file.php') // .then(response => response.json()) // .then(data => { // data.forEach(item => { // const uploadImage = document.querySelector(`.uploadImage[data-id="${item.formId}"]`); // if (uploadImage) { // const preview = uploadImage.querySelector('img'); // const spanText = uploadImage.querySelector('span'); // preview.src = `https://storage.manjapro.net/files/user/${item.fileName}`; // preview.style.display = 'block'; // spanText.style.display = 'none'; // } // }); // }); // }); // // upload.js // document.querySelectorAll('.uploadImage').forEach(uploadImage => { // uploadImage.addEventListener('click', function() { // const fileInput = document.createElement('input'); // fileInput.type = 'file'; // fileInput.accept = 'image/*'; // fileInput.style.display = 'none'; // fileInput.addEventListener('change', function() { // const file = this.files[0]; // const preview = uploadImage.querySelector('img'); // const spanText = uploadImage.querySelector('span'); // // Menampilkan preview gambar // const reader = new FileReader(); // reader.onload = function(e) { // preview.src = e.target.result; // preview.style.display = 'block'; // spanText.style.display = 'none'; // compressAndUploadImage(file, uploadImage.dataset.id, uploadImage); // }; // reader.readAsDataURL(file); // }); // document.body.appendChild(fileInput); // fileInput.click(); // }); // }); // function compressAndUploadImage(file, formId, uploadImage) { // const reader = new FileReader(); // reader.readAsDataURL(file); // reader.onload = function(event) { // const img = new Image(); // img.src = event.target.result; // img.onload = function() { // const canvas = document.createElement('canvas'); // const ctx = canvas.getContext('2d'); // const maxWidth = img.width; // const maxHeight = img.height; // canvas.width = maxWidth; // canvas.height = maxHeight; // ctx.drawImage(img, 0, 0, maxWidth, maxHeight); // let quality = 0.9; // let dataUrl = canvas.toDataURL('image/jpeg', quality); // // Mengurangi kualitas sampai ukuran gambar kurang dari 200KB // while (dataUrl.length > 200 * 1024) { // quality -= 0.05; // dataUrl = canvas.toDataURL('image/jpeg', quality); // } // fetch(dataUrl) // .then(res => res.blob()) // .then(blob => { // const formData = new FormData(); // formData.append('file', blob, file.name); // formData.append('formId', formId); // const xhr = new XMLHttpRequest(); // xhr.open('POST', 'list_data/upload_file.php', true); // // Menangani proses upload dan persentase // xhr.upload.onprogress = function(event) { // if (event.lengthComputable) { // const percentComplete = (event.loaded / event.total) * 100; // const progressBar = uploadImage.querySelector('.progressBar'); // progressBar.style.width = percentComplete + '%'; // uploadImage.querySelector('.progressContainer').style.display = 'block'; // } // }; // xhr.onload = function() { // if (xhr.status === 200) { // console.log('Success:', xhr.responseText); // showUploadAnimation(uploadImage); // } else { // console.error('Error:', xhr.responseText); // } // }; // xhr.send(formData); // }); // }; // }; // } // function showUploadAnimation(uploadImage) { // const uploaded = document.createElement('div'); // uploaded.innerText = 'Uploaded!'; // uploaded.style.position = 'absolute'; // uploaded.style.top = '0'; // uploaded.style.left = '0'; // uploaded.style.width = '100%'; // uploaded.style.height = '100%'; // uploaded.style.background = 'rgba(0, 128, 0, 0.5)'; // uploaded.style.color = 'white'; // uploaded.style.fontSize = '24px'; // uploaded.style.display = 'flex'; // uploaded.style.alignItems = 'center'; // uploaded.style.justifyContent = 'center'; // uploadImage.appendChild(uploaded); // setTimeout(() => { // uploaded.style.animation = 'fadeOut 2s forwards'; // setTimeout(() => { // uploadImage.removeChild(uploaded); // }, 2000); // }, 1000); // Menampilkan teks "Uploaded!" selama 1 detik sebelum memulai animasi // } document.addEventListener('DOMContentLoaded', function() { // Tambah CSS otomatis (tanpa ganggu style .uploadImage) const style = document.createElement('style'); style.innerHTML = ` .progressCircle { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 100px; height: 100px; display: flex; align-items: center; justify-content: center; z-index: 10; } .progressSvg { position: absolute; width: 100%; height: 100%; transform: rotate(-90deg); } .progressSvg .bg { fill: none; stroke: #eee; stroke-width: 2; } .progressSvg .progress { fill: none; stroke: #04c224; stroke-width: 2; stroke-linecap: round; stroke-dasharray: 100, 100; stroke-dashoffset: 100; transition: stroke-dashoffset 0.3s; } .progressText { position: absolute; font-weight: bold; font-size: 18px; color: #333; }`; document.head.appendChild(style); // URL gambar default (jika tidak ada file) const defaultImage = 'https://storage.manjapro.net/files/user/default.jpg'; // Ambil data file existing dari server fetch('list_data/get_upload_file.php') .then(response => response.json()) .then(data => { // Tandai semua uploadImage sebagai belum diisi dulu document.querySelectorAll('.uploadImage').forEach(upload => { const preview = upload.querySelector('img'); const spanText = upload.querySelector('span'); preview.src = defaultImage; preview.style.display = 'block'; spanText.style.display = 'none'; }); // Lalu isi jika ada data dari server data.forEach(item => { const uploadImage = document.querySelector(`.uploadImage[data-id="${item.formId}"]`); if (uploadImage) { const preview = uploadImage.querySelector('img'); const spanText = uploadImage.querySelector('span'); const fileName = item.fileName && item.fileName.trim() !== '' ? item.fileName : 'default.jpg'; preview.src = `https://storage.manjapro.net/files/user/${fileName}`; // preview.src = `https://storage.manjapro.net/files/user/${item.fileName}`; preview.style.display = 'block'; spanText.style.display = 'none'; } }); }) .catch(() => { // Kalau gagal fetch (misal offline), isi semua dengan default document.querySelectorAll('.uploadImage').forEach(upload => { const preview = upload.querySelector('img'); const spanText = upload.querySelector('span'); preview.src = defaultImage; preview.style.display = 'block'; spanText.style.display = 'none'; }); }); // Klik upload document.querySelectorAll('.uploadImage').forEach(uploadImage => { uploadImage.addEventListener('click', function() { const fileInput = document.createElement('input'); fileInput.type = 'file'; fileInput.accept = 'image/*'; fileInput.style.display = 'none'; fileInput.addEventListener('change', function() { const file = this.files[0]; if (!file) return; // Maksimum 20 MB if (file.size > 20 * 1024 * 1024) { alert('Ukuran file maksimal 20MB.'); return; } const preview = uploadImage.querySelector('img'); const spanText = uploadImage.querySelector('span'); const reader = new FileReader(); reader.onload = function(e) { preview.src = e.target.result; preview.style.display = 'block'; spanText.style.display = 'none'; compressAndUploadImage(file, uploadImage.dataset.id, uploadImage); }; reader.readAsDataURL(file); }); document.body.appendChild(fileInput); fileInput.click(); }); }); }); // Membuat progres circle di tengah function createProgressCircle(uploadImage) { let existing = uploadImage.querySelector('.progressCircle'); if (existing) return existing; const circle = document.createElement('div'); circle.className = 'progressCircle'; circle.innerHTML = `