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;
|