aboutsummaryrefslogtreecommitdiffstats
path: root/view/js/mod_cloud.js
diff options
context:
space:
mode:
Diffstat (limited to 'view/js/mod_cloud.js')
-rw-r--r--view/js/mod_cloud.js98
1 files changed, 86 insertions, 12 deletions
diff --git a/view/js/mod_cloud.js b/view/js/mod_cloud.js
index 4ef87ec4b..e56ec2a81 100644
--- a/view/js/mod_cloud.js
+++ b/view/js/mod_cloud.js
@@ -22,6 +22,7 @@ function UploadInit() {
if (xhr.upload) {
// file select
+ fileselect.attr("multiple", 'multiple');
fileselect.on("change", UploadFileSelectHandler);
// file submit
@@ -64,30 +65,37 @@ function DragDropUploadFileSelectHandler(e) {
// file selection via input
function UploadFileSelectHandler(e) {
// fetch FileList object
- if(e.type === 'click') {
+ if(e.target.id === 'upload-submit') {
e.preventDefault();
var files = e.data[0].files;
}
- else {
+ if(e.target.id === 'files-upload') {
+ $('.new-upload').remove();
var files = e.target.files;
}
- $('.new-upload').remove();
-
// process all File objects
for (var i = 0, f; f = files[i]; i++) {
- prepareHtml(f, i);
- if(e.type === 'click')
+ if(e.target.id === 'files-upload')
+ prepareHtml(f, i);
+ if(e.target.id === 'upload-submit') {
UploadFile(f, i);
+ }
}
}
function prepareHtml(f, i) {
- $("#cloud-index").prepend(
- "<tr class='new-upload'>" + "<td id='upload-progress-" + i + "'></td><td>" + f.name +
- "</td><td>" + f.type +
- "</td><td></td><td></td><td></td><td></td><td>" + formatSizeUnits(f.size) +
- "</td><td></td></tr>"
+ var num = i - 1;
+ $('#cloud-index #new-upload-progress-bar-' + num.toString()).after(
+ '<tr id="new-upload-' + i + '" class="new-upload">' +
+ '<td><i class="fa ' + getIconFromType(f.type) + '" title="' + f.type + '"></i></td>' +
+ '<td>' + f.name + '</td>' +
+ '<td id="upload-progress-' + i + '"></td><td></td><td></td><td></td><td></td>' +
+ '<td class="hidden-xs">' + formatSizeUnits(f.size) + '</td><td class="hidden-xs"></td>' +
+ '</tr>' +
+ '<tr id="new-upload-progress-bar-' + i + '" class="new-upload">' +
+ '<td id="upload-progress-bar-' + i + '" colspan="9" class="upload-progress-bar"></td>' +
+ '</tr>'
);
}
@@ -101,6 +109,52 @@ function formatSizeUnits(bytes){
return bytes;
}
+// this is basically a js port of include/text.php getIconFromType() function
+function getIconFromType(type) {
+ var map = {
+ //Common file
+ 'application/octet-stream': 'fa-file-o',
+ //Text
+ 'text/plain': 'fa-file-text-o',
+ 'application/msword': 'fa-file-word-o',
+ 'application/pdf': 'fa-file-pdf-o',
+ 'application/vnd.oasis.opendocument.text': 'fa-file-word-o',
+ 'application/epub+zip': 'fa-book',
+ //Spreadsheet
+ 'application/vnd.oasis.opendocument.spreadsheet': 'fa-file-excel-o',
+ 'application/vnd.ms-excel': 'fa-file-excel-o',
+ //Image
+ 'image/jpeg': 'fa-picture-o',
+ 'image/png': 'fa-picture-o',
+ 'image/gif': 'fa-picture-o',
+ 'image/svg+xml': 'fa-picture-o',
+ //Archive
+ 'application/zip': 'fa-file-archive-o',
+ 'application/x-rar-compressed': 'fa-file-archive-o',
+ //Audio
+ 'audio/mpeg': 'fa-file-audio-o',
+ 'audio/mp3': 'fa-file-audio-o', //webkit browsers need that
+ 'audio/wav': 'fa-file-audio-o',
+ 'application/ogg': 'fa-file-audio-o',
+ 'audio/ogg': 'fa-file-audio-o',
+ 'audio/webm': 'fa-file-audio-o',
+ 'audio/mp4': 'fa-file-audio-o',
+ //Video
+ 'video/quicktime': 'fa-file-video-o',
+ 'video/webm': 'fa-file-video-o',
+ 'video/mp4': 'fa-file-video-o',
+ 'video/x-matroska': 'fa-file-video-o'
+ };
+
+ var iconFromType = 'fa-file-o';
+
+ if (type in map) {
+ iconFromType = map[type];
+ }
+
+ return iconFromType;
+}
+
// upload files
function UploadFile(file, idx) {
@@ -111,19 +165,30 @@ function UploadFile(file, idx) {
xhr.withCredentials = true; // Include the SESSION cookie info for authentication
(xhr.upload || xhr).addEventListener('progress', function (e) {
+
var done = e.position || e.loaded;
var total = e.totalSize || e.total;
// Dynamically update the percentage complete displayed in the file upload list
$('#upload-progress-' + idx).html(Math.round(done / total * 100) + '%');
+ $('#upload-progress-bar-' + idx).css('background-size', Math.round(done / total * 100) + '%');
+
+ if(done == total) {
+ $('#upload-progress-' + idx).html('Processing...');
+ }
+
});
+
xhr.addEventListener('load', function (e) {
+ //we could possibly turn the filenames to real links here and add the delete and edit buttons to avoid page reload...
+ $('#upload-progress-' + idx).html('Ready!');
//console.log('xhr upload complete', e);
window.fileUploadsCompleted = window.fileUploadsCompleted + 1;
// When all the uploads have completed, refresh the page
if (window.filesToUpload > 0 && window.fileUploadsCompleted === window.filesToUpload) {
+
window.fileUploadsCompleted = window.filesToUpload = 0;
// After uploads complete, refresh browser window to display new files
@@ -131,11 +196,20 @@ function UploadFile(file, idx) {
}
});
+
+ xhr.addEventListener('error', function (e) {
+ $('#upload-progress-' + idx).html('<span style="color: red;">ERROR</span>');
+ });
+
// POST to the entire cloud path
xhr.open('post', window.location.pathname, true);
- var data = new FormData(document.getElementById("ajax-upload-files"));
+ var formfields = $("#ajax-upload-files").serializeArray();
+ var data = new FormData();
+ $.each(formfields, function(i, field) {
+ data.append(field.name, field.value);
+ });
data.append('file', file);
xhr.send(data);