summaryrefslogtreecommitdiff
path: root/www/static/js/dropzone.js
blob: ead87c66a988a30f235a3b81699f5cacf160911e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
var	vfs_upload_queue = [];
	function dragover(e){
		e.preventDefault();
		var dropzone = document.getElementById("dropzone");
		dropzone.style.backgroundColor = "#E6E6FF";
	}

	function dragout(e){
		var dropzone = document.getElementById("dropzone");
		dropzone.style.backgroundColor = "white";
	}
	
	function drop(e){
		e.preventDefault();
		var dropzone = document.getElementById("dropzone");
		dropzone.style.backgroundColor = "white";
		addToUploadQueue(e.dataTransfer.files);
		
	}
	
	function addToUploadQueue(files){
		for(file of files){
			try {
				reader = new FileReader();
				reader.readAsBinaryString(file);
			} catch (NS_ERROR_FILE_ACCESS_DENIED) {
				//file is a directory. Dropping of directories is only implemented in chrome > v21.
				alert("file is a directory. Dropping of directories is only implemented in chrome > v21.");
				break;
				
			}
			var filelist = document.getElementById("filelist");
			var entry = document.createElement("tr");
			
			var filename = document.createElement("td");
			filename.appendChild(document.createTextNode(file.name));
			
			var filesize = document.createElement("td");
			filesize.appendChild(document.createTextNode(Math.floor(file.size/1024*100)/100+"KB"));
			filesize.className = "filesize";
			
			var progressBar = document.createElement("progress");
			progressBar.id="progressBar-"+file.name;
			progressBar.className="progressBar";
			var progressCol = document.createElement("td");
			progressCol.className="progressCol";
			progressCol.appendChild(progressBar);
			
			var publicCol = document.createElement("td");
			var public_at = document.createElement("input");
			public_at.type = "checkbox";
			public_at.id = "public-"+file.name; 
			publicCol.appendChild(public_at);
			
			entry.appendChild(filename);
			entry.appendChild(filesize);
			entry.appendChild(publicCol);
			entry.appendChild(progressCol);
			
			filelist.appendChild(entry);
			vfs_upload_queue.push(file);
		}
	}
	
	function upload(){
		for(i = 0; i<vfs_upload_queue.length; i++){
			document.getElementById("progressBar-"+vfs_upload_queue[i].name).value = 0;
			document.getElementById("progressBar-"+vfs_upload_queue[i].name).max = 100;
			var xhr = new XMLHttpRequest();
			
			xhr.upload.filename = vfs_upload_queue[i].name;
			
			
			var data = new FormData();
		
			data.append("userfile", vfs_upload_queue[i]);
			data.append("task", "upload");
			if(document.getElementById("public-"+ vfs_upload_queue[i].name).checked){
				data.append("share", "PUBLIC");
			}
				
			data.append("path", folder);
			
			xhr.onload=function(){
				if (xhr.status==200){
					alert("upload done");
				}else{
					alert("upload failed"); 
				}
			};
		
			xhr.upload.onprogress= function(e){
				if(e.lengthComputable){
					document.getElementById("progressBar-"+this.filename).value = Math.ceil(e.loaded/e.total)*100;
					document.getElementById("progress-text").innerHTML = Math.ceil(e.loaded/e.total)*100 + "%";
				}else{
					alert("cant compute progress");
				}
			};
			
			xhr.open('post', document.URL, true);
			xhr.overrideMimeType('text/plain; charset=x-user-defined-binary');
			xhr.send(data);
		}
	}