-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.js
executable file
·98 lines (90 loc) · 3.15 KB
/
main.js
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
var holder;
var progress;
var fileupload;
var tests = {
filereader: typeof FileReader != 'undefined',
dnd: 'draggable' in document.createElement('span'),
formdata: !!window.FormData,
progress: "upload" in new XMLHttpRequest
}
var acceptedTypes = {
'image/png': true,
'image/jpeg': true,
'image/gif': true
}
window.onload = function(){
holder = document.getElementById('holder');
progress = document.getElementById('uploadprogress'),
fileupload = document.getElementById('upload');
holder.addEventListener("dragexit", dragExit, false);
document.getElementById('draghere').onmouseover = function() { this.innerHTML = "click me to upload your tiny picture ! "; }
document.getElementById('draghere').onmouseout = function() { this.innerHTML = " drag & drop to upload your tiny picture !"; }
if (tests.dnd) {
holder.ondragover = function () { this.className = 'dragin'; return false; };
holder.ondragend = function () { this.className = ''; return false; };
holder.ondrop = function (e) {
e.preventDefault();
readfiles(e.dataTransfer.files);
}
} else {
fileupload.className = 'hidden';
fileupload.querySelector('input').onchange = function () {
readfiles(this.files);
};
}
var fileSelect = document.getElementById("draghere"),
fileElem = document.getElementById("fileElem");
fileSelect.addEventListener("click", function (e) {
if (fileElem) {
fileElem.click();
}
e.preventDefault(); // prevent navigation to "#"
}, false);
}
function previewfile(file) {
if (tests.filereader === true && acceptedTypes[file.type] === true) {
var reader = new FileReader();
reader.onload = function (event) {
var image = new Image();
image.src = event.target.result;
image.width = 250; // a fake resize
image.heigh = 250; // fake another size
holder.appendChild(image);
};
reader.readAsDataURL(file);
} else {
holder.innerHTML += '<p>Uploaded ' + file.name + ' ' + (file.fileSize ? (file.fileSize/1024|0) + 'K' : '');
console.log(file);
}
}
function readfiles(files) {
holder.className = '';
document.getElementById('draghere').className = 'hide';
holder.className = 'extend';
progress.className='';
var formData = tests.formdata ? new FormData() : null;
for (var i = 0; i < files.length; i++) {
if (tests.formdata) formData.append('file'+i, files[i]);
previewfile(files[i]);
}
// now post a new XHR request
if (tests.formdata) {
var xhr = new XMLHttpRequest();
xhr.open('POST', './data.php');
xhr.onload = function() {
progress.value = progress.innerHTML = 100;
var result = JSON.parse(xhr.responseText);
console.log(result);
};
if (tests.progress) {
xhr.upload.onprogress = function (event) {
if (event.lengthComputable) {
var complete = (event.loaded / event.total * 100 | 0);
progress.value = progress.innerHTML = complete;
}
}
}
xhr.send(formData);
}
}
function dragExit() { holder.className=''; return false; };