Changeset 56 in code for trunk/example/static
- Timestamp:
- Jan 18, 2022, 6:01:58 AM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/example/static/dz.js
r50 r56 5 5 // Only start once the DOM tree is ready 6 6 if(document.readyState === "complete") { 7 7 setupzone(); 8 8 } else { 9 9 document.addEventListener("DOMContentLoaded", setupzone); 10 10 } 11 11 12 12 function setupzone() { 13 14 15 13 let dropzone = document.getElementById("dropzone"); 14 let fileinput = document.getElementById("filebox"); 15 let fallbackform = document.getElementById("fallbackform"); 16 16 17 17 fallbackform.style.display = "none"; 18 18 19 20 19 dropzone.className = "dropzone"; 20 dropzone.innerHTML = "Click or drop file(s)"; 21 21 22 23 22 dropzone.onclick = function() { 23 fileinput.click() 24 24 return false; 25 25 } 26 26 27 dropzone.ondragover = function() { 28 this.className = "dropzone dragover"; 29 return false; 30 } 31 32 dropzone.ondragleave = function() { 33 this.className = "dropzone"; 34 return false; 35 } 27 dropzone.ondragover = function() { 28 this.className = "dropzone dragover"; 29 return false; 30 } 36 31 37 dropzone.ondrop = function(e) { 38 // Stop browser from simply opening that was just dropped 39 e.preventDefault(); 40 // Restore original dropzone appearance 41 this.className = "dropzone"; 42 sendfiles(e.dataTransfer.files) 43 } 32 dropzone.ondragleave = function() { 33 this.className = "dropzone"; 34 return false; 35 } 44 36 45 fileinput.onchange = function(e) { 46 sendfiles(this.files) 47 } 37 dropzone.ondrop = function(e) { 38 // Stop browser from simply opening that was just dropped 39 e.preventDefault(); 40 // Restore original dropzone appearance 41 this.className = "dropzone"; 42 sendfiles(e.dataTransfer.files) 43 } 44 45 fileinput.onchange = function(e) { 46 sendfiles(this.files) 47 } 48 48 } 49 49 50 50 function sendfiles(files) { 51 let uploads = document.getElementById("uploads"); 52 let progressbar = document.createElement("progress"); 53 let uploadlist = document.createElement("ul"); 54 let formData = new FormData(), xhr = new XMLHttpRequest(); 51 let uploads = document.getElementById("uploads"); 52 let progressbar = document.createElement("progress"); 53 let uploadlist = document.createElement("ul"); 54 let uploadtext = document.createElement("textarea"); 55 let formData = new FormData(), xhr = new XMLHttpRequest(); 55 56 56 uploads.appendChild(progressbar); 57 uploads.appendChild(uploadlist);57 // used for clipboard only 58 uploadtext.style.display = "none"; 58 59 59 formData.append("expiry", 10); 60 for(let i=0; i < files.length; i++) { 61 formData.append("file", files[i]); 62 } 60 uploads.appendChild(progressbar); 61 uploads.appendChild(uploadlist); 62 uploads.appendChild(uploadtext); 63 63 64 // triggers periodically 65 xhr.upload.onprogress = function(e) { 66 // e.loaded - how many bytes downloaded 67 // e.lengthComputable = true if the server sent Content-Length header 68 // e.total - total number of bytes (if lengthComputable) 69 if (e.lengthComputable) { 70 progressbar.max = e.total 64 formData.append("expiry", 10); 65 for(let i=0; i < files.length; i++) { 66 formData.append("file", files[i]); 71 67 } 72 progressbar.value = e.loaded73 }74 68 75 xhr.onreadystatechange = function() { 76 if(xhr.readyState === XMLHttpRequest.DONE) { 77 progressbar.remove(); 78 this.response.split(/\r?\n/).forEach(function(link) { 79 let li = document.createElement("li"); 80 li.innerHTML = `<a href="${link}">${link}</a>`; 81 uploadlist.appendChild(li); 82 }); 83 } 84 } 69 // triggers periodically 70 xhr.upload.onprogress = function(e) { 71 // e.loaded - how many bytes downloaded 72 // e.lengthComputable = true if the server sent Content-Length header 73 // e.total - total number of bytes (if lengthComputable) 85 74 86 xhr.open('POST', window.location.href, true); // async = true 87 xhr.send(formData); 75 } 76 77 xhr.onreadystatechange = function() { 78 if(xhr.readyState === XMLHttpRequest.DONE) { 79 progressbar.remove(); 80 81 this.response.split(/\r?\n/).forEach(function(link) { 82 let li = document.createElement("li"); 83 li.innerHTML = `<a href="${link}">${link}</a>`; 84 uploadlist.appendChild(li); 85 }); 86 let clippy = document.createElement("button"); 87 uploads.appendChild(clippy); 88 clippy.innerText = " 📋 copy "; 89 clippy.onclick = function(e) { 90 uploadtext.select(); 91 document.execCommand("copy"); 92 } 93 } 94 } 95 96 xhr.open('POST', window.location.href, true); // async = true 97 xhr.send(formData); 88 98 }
Note:
See TracChangeset
for help on using the changeset viewer.