Files
NodeBB/public/src/modules/uploader.js

98 lines
2.3 KiB
JavaScript
Raw Normal View History

2015-01-10 19:48:00 -05:00
'use strict';
/* globals define */
2014-11-18 14:54:54 -05:00
define('uploader', ['csrf'], function(csrf) {
2015-01-10 19:48:00 -05:00
var module = {};
2014-02-11 17:16:17 -05:00
module.open = function(route, params, fileSize, callback) {
2014-10-23 15:01:36 -04:00
var uploadModal = $('#upload-picture-modal');
uploadModal.modal('show').removeClass('hide');
module.hideAlerts();
2014-02-11 17:16:17 -05:00
var uploadForm = $('#uploadForm');
uploadForm[0].reset();
uploadForm.attr('action', route);
uploadForm.find('#params').val(JSON.stringify(params));
2015-01-10 18:59:24 -05:00
if (fileSize) {
2014-02-11 17:16:17 -05:00
uploadForm.find('#upload-file-size').html(fileSize);
uploadForm.find('#file-size-block').removeClass('hide');
} else {
uploadForm.find('#file-size-block').addClass('hide');
}
$('#pictureUploadSubmitBtn').off('click').on('click', function() {
2014-10-23 15:01:36 -04:00
uploadForm.submit();
});
uploadForm.off('submit').submit(function() {
2015-01-10 19:48:00 -05:00
function showAlert(type, message) {
module.hideAlerts();
2015-01-10 19:48:00 -05:00
uploadModal.find('#alert-' + type).text(message).removeClass('hide');
}
2015-01-10 19:48:00 -05:00
showAlert('status', 'uploading the file ...');
2014-10-23 15:01:36 -04:00
uploadModal.find('#upload-progress-bar').css('width', '0%');
uploadModal.find('#upload-progress-box').show().removeClass('hide');
if (!$('#userPhotoInput').val()) {
2015-01-10 19:48:00 -05:00
showAlert('error', 'select an image to upload!');
return false;
}
$(this).ajaxSubmit({
2014-11-18 14:54:54 -05:00
headers: {
'x-csrf-token': csrf.get()
},
error: function(xhr) {
xhr = maybeParse(xhr);
2015-01-10 19:48:00 -05:00
showAlert('error', 'Error: ' + xhr.status);
},
uploadProgress: function(event, position, total, percent) {
2014-10-23 15:01:36 -04:00
uploadModal.find('#upload-progress-bar').css('width', percent + '%');
},
success: function(response) {
response = maybeParse(response);
if (response.error) {
2015-01-10 19:48:00 -05:00
showAlert('error', response.error);
return;
}
2015-01-10 19:48:00 -05:00
callback(response[0].url);
showAlert('success', 'File uploaded successfully!');
setTimeout(function() {
module.hideAlerts();
2014-10-23 15:01:36 -04:00
uploadModal.modal('hide');
}, 750);
}
});
return false;
});
};
2015-01-10 19:48:00 -05:00
function maybeParse(response) {
if (typeof response === 'string') {
try {
return $.parseJSON(response);
} catch (e) {
return {error: 'Something went wrong while parsing server response'};
}
}
return response;
}
module.hideAlerts = function() {
2015-01-10 19:48:00 -05:00
$('#upload-picture-modal').find('#alert-status, #alert-success, #alert-error, #upload-progress-box').addClass('hide');
};
return module;
2014-04-10 20:31:57 +01:00
});