aboutsummaryrefslogtreecommitdiff
path: root/assets/cargohold.js
blob: e1278b7dc79ea2a0497849293414e8facbd22f51 (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
/*
 * TODO:
 *	check if files exist
 *	check file sizes
 */

var running = false;
var queue = [];


function queue_work(){
	let i = 0;
	for(; i < queue.length; i++){
		item = queue[i];
		if(!item.started){
			console.log(item);
			console.log("Starting " + item.file.name);
			item.started = true;

			let req = new XMLHttpRequest();
			let data = new FormData();
			data.append("file", item.file);                                
			req.upload.addEventListener("progress", function(evt){
				if(evt.lengthComputable){
					console.log("Upload for " + item.file.name + " at " + evt.loaded / evt.total);
					item.node.childNodes[1].value = evt.loaded;
				}
			});
			req.onloadstart = function(evt){
				console.log("Upload for " + item.file.name + " started");
				item.node.childNodes[1].max = item.file.size;
				item.node.childNodes[1].value = 0;
			};
			req.onloadend = function(evt){
				console.log("Upload for " + item.file.name + " ended");
				queue_work();
			};
			req.onerror = function(evt){
				console.log("Upload for " + item.file.name + " errored");
				item.node.className += " errored";
			};
			req.onabort = function(evt){
				console.log("Upload for " + item.file.name + " aborted");
				item.node.className += "errored";
			};
			req.onreadystatechange = function(evt){
				console.log("Upload for " + item.file.name + " state " + req.readyState);
			};
			req.open("POST", 'upload');
			req.send(data);
			return;
		}
	}

	console.log("Queue run done");
	running = false;
}

function queue_run(){
	if(running || queue.length == 0){
		return;
	}

	running = true;

	console.log("Starting queue run");
	queue_work();
}

function element(id){
	return document.getElementById(id);
}

function node(tag, style, text){
	let new_node = document.createElement(tag);
	new_node.className = style;
	if(text){
		new_node.textContent = text;
	}
	return new_node;
}

function upload_element(file){
	let new_node = node("div", "queue-entry");
	new_node.appendChild(node("span", "name", file.name));
	new_node.appendChild(node("progress", "progress"));
	element("queue").appendChild(new_node);
	return new_node;
}

function upload_start(element){
	for(let i = 0; i < element.target.files.length; i++){
		console.log(element.target.files[i]);
		queue.push({"file": element.target.files[i], "node": upload_element(element.target.files[i]), "progress": 0, "started": false});
	}
	queue_run();
}

function init(){
	element("file-submit").style.display = "none";
	element("files").onchange = upload_start;
	//setInterval(queue_run, 1000);
}

window.onload = init;