const getScript = document.currentScript const pageTool = getScript.dataset.tool const lang = getScript.dataset.lang const inputBox = document.querySelector('#Inputbox') const addFiles = document.querySelector(".add-more-files") const gdrive = document.querySelector('#filepicker') const fileDropBox = document.querySelector('.custom-box') const workspace = document.querySelector(".workspace") const selectedFilesList = document.querySelector('.selectedFilesList') const downloadButton = document.querySelector('#download-button') const submitButton = document.querySelector("#submit-button") const showProcessingFiles = document.querySelector(".files-processing-list") let root = document.querySelector(':root') root.style.setProperty('--maincolor', fileDropBox.dataset.color) const getFile = (file) => { handleFile(file) } fileDropBox.addEventListener('dragover', (e) => { e.preventDefault() }) fileDropBox.addEventListener('drop', (e) => { e.preventDefault() handleFile(e.dataTransfer.files[0]) }) const fileOnChange = () => { handleFile(file.files) } inputBox.onclick = function () { document.querySelector('#file').click() } const fileOnChange2 = () => { addMoreFiles(document.querySelector('#file2').files) } addFiles.onclick = function () { document.querySelector('#file2').click() } var files = [] let fileName = ""; let blobList = [] const addMoreFiles = (addFiles) => { handleFile(addFiles) } const onSubmit = (files) => { blobList = [] Promise.all( files.map((item, index) => { document.querySelector(`#loader-${index}`).innerHTML = `processing
Loading...
` return new Promise((resolve, reject) => { batchConversion(item, index).then(([indexValue, blob, type]) => { blobList.push(blob) document.querySelector(`#loader-${indexValue}`).innerHTML = `finished` document.querySelector(`#download-${indexValue}`).style.display = "inline-block" resolve() }) }).catch((error) => { console.log(error) }) })).then(() => { document.querySelector('#download-zip').style.display = "block" let zip = new JSZip() let zipFiles = zip.folder(`safeimagekit-batch`) blobList.map((file, index) => { zipFiles.file( `safeimagekit-${index + 1}.png`, getBase64String(file), { base64: true } ) }) document.querySelector('#download-zip').addEventListener('click', () => { zip.generateAsync({ type: 'blob' }).then(function (content) { saveAs(content, `safeimagekit-batch.zip`) if (lang === 'en') { window.location.href = `/download?tool=${pageTool}` } else { window.location.href = `/${lang}/download?tool=${pageTool}` } }) }) }) } const renderFiles = (files) => { files.map((file, index) => { if (file) { let loader = "Ready" showProcessingFiles.innerHTML += ` file ${file.name} ${loader} ` } }) } const handleFile = (file) => { showProcessingFiles.innerHTML = "" if (file) { for (let i = 0; i < file.length; i++) { files.push(file[i]) stopLoading() workspace.style.display = 'block' document.querySelector('#file').style.display = "block" let listItem = document.createElement('li') listItem.style.listStyle = "none" let getFileSize = formatBytes(file[i].size) listItem.innerHTML = `${file[i].name} (${getFileSize})` selectedFilesList.appendChild(listItem) } } renderFiles(files) submitButton.addEventListener("click", () => onSubmit(files)) } function formatBytes(bytes, decimals = 2) { if (bytes === 0) return '0 Bytes'; const k = 1024; const dm = decimals < 0 ? 0 : decimals; const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; const i = Math.floor(Math.log(bytes) / Math.log(k)); return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; } const handleDownload = (e) => { let find = blobList[Number(e.id.replace(/^\D+/g, ''))] switch (e.dataset.type) { case "image": let a = document.createElement('a') a.href = find a.download = `safeimagekit.png` document.body.appendChild(a) a.click() break; default: break; } } const showLoading = () => { document.querySelector('#file-loader').style.display = 'flex' document.querySelector('.file-input').style.display = 'none' } const stopLoading = () => { fileDropBox.style.display = 'none' } const showDropDown = document.querySelector('.file-pick-dropdown') const icon = document.querySelector('.arrow-sign') const dropDown = document.querySelector('.file-picker-dropdown') showDropDown.addEventListener('click', () => { addScripts() if (dropDown.style.display !== 'none') { dropDown.style.display = 'none' icon.classList.remove('fa-angle-up') icon.classList.add('fa-angle-down') } else { dropDown.style.display = 'block' icon.classList.remove('fa-angle-down') icon.classList.add('fa-angle-up') } }) const getBase64String = (dataURL) => { const idx = dataURL.indexOf('base64,') + 'base64,'.length return dataURL.substring(idx) } const dataURLtoBlob = (dataurl) => { let arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n) while (n--) { u8arr[n] = bstr.charCodeAt(n) } return new Blob([u8arr], { type: mime }) }