111 lines
4.9 KiB
JavaScript
111 lines
4.9 KiB
JavaScript
define([
|
|
'js/views/import', 'jquery', 'gettext', 'jquery.fileupload', 'jquery.cookie'
|
|
], function(CourseImport, $, gettext) {
|
|
'use strict';
|
|
return function (feedbackUrl) {
|
|
var bar = $('.progress-bar'),
|
|
fill = $('.progress-fill'),
|
|
submitBtn = $('.submit-button'),
|
|
chooseBtn = $('.choose-file-button'),
|
|
defaults = [
|
|
gettext('There was an error during the upload process.') + '\n',
|
|
gettext('There was an error while unpacking the file.') + '\n',
|
|
gettext('There was an error while verifying the file you submitted.') + '\n',
|
|
gettext('There was an error while importing the new course to our database.') + '\n'
|
|
],
|
|
// Display the status of last file upload on page load
|
|
lastFileUpload = $.cookie('lastfileupload'),
|
|
file;
|
|
|
|
if (lastFileUpload){
|
|
CourseImport.getAndStartUploadFeedback(feedbackUrl.replace('fillerName', lastFileUpload), lastFileUpload);
|
|
}
|
|
|
|
$('#fileupload').fileupload({
|
|
dataType: 'json',
|
|
type: 'POST',
|
|
maxChunkSize: 20 * 1000000, // 20 MB
|
|
autoUpload: false,
|
|
add: function(e, data) {
|
|
CourseImport.clearImportDisplay();
|
|
CourseImport.okayToNavigateAway = false;
|
|
submitBtn.unbind('click');
|
|
file = data.files[0];
|
|
if (file.name.match(/tar\.gz$/)) {
|
|
submitBtn.click(function(event){
|
|
event.preventDefault();
|
|
$.cookie('lastfileupload', file.name);
|
|
submitBtn.hide();
|
|
CourseImport.startUploadFeedback();
|
|
data.submit().complete(function(result, textStatus, xhr) {
|
|
window.onbeforeunload = null;
|
|
if (xhr.status != 200) {
|
|
var serverMsg, errMsg, stage;
|
|
try{
|
|
serverMsg = $.parseJSON(result.responseText);
|
|
} catch (e) {
|
|
return;
|
|
}
|
|
errMsg = serverMsg.hasOwnProperty('ErrMsg') ? serverMsg.ErrMsg : '' ;
|
|
if (serverMsg.hasOwnProperty('Stage')) {
|
|
stage = Math.abs(serverMsg.Stage);
|
|
CourseImport.stageError(stage, defaults[stage] + errMsg);
|
|
}
|
|
else {
|
|
alert(gettext('Your import has failed.') + '\n\n' + errMsg);
|
|
}
|
|
chooseBtn.html(gettext('Choose new file')).show();
|
|
bar.hide();
|
|
}
|
|
CourseImport.stopGetStatus = true;
|
|
chooseBtn.html(gettext('Choose new file')).show();
|
|
bar.hide();
|
|
});
|
|
});
|
|
} else {
|
|
data.files = [];
|
|
}
|
|
},
|
|
|
|
progressall: function(e, data){
|
|
var percentInt = data.loaded / data.total * 100,
|
|
percentVal = parseInt(percentInt, 10) + '%',
|
|
doneAt;
|
|
// Firefox makes ProgressEvent.loaded equal ProgressEvent.total only
|
|
// after receiving a response from the server (see Mozilla bug 637002),
|
|
// so for Firefox we jump the gun a little.
|
|
if (navigator.userAgent.toLowerCase().indexOf('firefox') > -1) {
|
|
doneAt = 95;
|
|
} else {
|
|
doneAt = 99;
|
|
}
|
|
if (percentInt >= doneAt) {
|
|
bar.hide();
|
|
// Start feedback with delay so that current stage of import properly updates in session
|
|
setTimeout(
|
|
function () { CourseImport.startServerFeedback(feedbackUrl.replace('fillerName', file.name));},
|
|
3000
|
|
);
|
|
} else {
|
|
bar.show();
|
|
fill.width(percentVal).html(percentVal);
|
|
}
|
|
},
|
|
done: function(event, data){
|
|
bar.hide();
|
|
window.onbeforeunload = null;
|
|
CourseImport.displayFinishedImport();
|
|
},
|
|
start: function(event) {
|
|
window.onbeforeunload = function() {
|
|
if (!CourseImport.okayToNavigateAway) {
|
|
return "${_('Your import is in progress; navigating away will abort it.')}";
|
|
}
|
|
};
|
|
},
|
|
sequentialUploads: true,
|
|
notifyOnError: false
|
|
});
|
|
};
|
|
});
|