You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

114 lines
3.1 KiB
JavaScript

'use strict';
/* globals define, templates, translator */
define('uploader', ['csrf', 'translator'], function(csrf, translator) {
var module = {};
11 years ago
module.open = function(route, params, fileSize, callback) {
console.warn('[uploader] uploader.open() is deprecated, please use uploader.show() instead, and pass parameters as a singe option with callback, e.g. uploader.show({}, callback);');
module.show({
route: route,
params: params,
fileSize: fileSize
}, callback);
};
module.show = function(data, callback) {
parseModal({
showHelp: data.hasOwnProperty('showHelp') && data.showHelp !== undefined ? data.showHelp : true,
fileSize: data.hasOwnProperty('fileSize') && data.fileSize !== undefined ? parseInt(data.fileSize, 10) : false
}, function(uploadModal) {
uploadModal = $(uploadModal);
uploadModal.modal('show');
uploadModal.on('hidden.bs.modal', function() {
uploadModal.remove();
});
var uploadForm = uploadModal.find('#uploadForm');
uploadForm.attr('action', data.route);
uploadForm.find('#params').val(JSON.stringify(data.params));
uploadModal.find('#pictureUploadSubmitBtn').off('click').on('click', function() {
uploadForm.submit();
});
uploadForm.off('submit').submit(function() {
function showAlert(type, message) {
module.hideAlerts(uploadModal);
10 years ago
uploadModal.find('#alert-' + type).translateText(message).removeClass('hide');
}
showAlert('status', '[[uploads:uploading-file]]');
uploadModal.find('#upload-progress-bar').css('width', '0%');
uploadModal.find('#upload-progress-box').show().removeClass('hide');
if (!uploadModal.find('#userPhotoInput').val()) {
showAlert('error', '[[uploads:select-file-to-upload]]');
return false;
}
$(this).ajaxSubmit({
headers: {
'x-csrf-token': csrf.get()
},
error: function(xhr) {
xhr = maybeParse(xhr);
9 years ago
showAlert('error', xhr.responseJSON ? (xhr.responseJSON.error || xhr.statusText) : 'error uploading, code : ' + xhr.status);
},
uploadProgress: function(event, position, total, percent) {
uploadModal.find('#upload-progress-bar').css('width', percent + '%');
},
success: function(response) {
response = maybeParse(response);
if (response.error) {
showAlert('error', response.error);
return;
}
callback(response[0].url);
showAlert('success', '[[uploads:upload-success]]');
setTimeout(function() {
10 years ago
module.hideAlerts(uploadModal);
uploadModal.modal('hide');
}, 750);
}
});
return false;
});
});
};
function parseModal(tplVals, callback) {
templates.parse('partials/modals/upload_picture_modal', tplVals, function(html) {
translator.translate(html, callback);
});
}
function maybeParse(response) {
if (typeof response === 'string') {
try {
return $.parseJSON(response);
} catch (e) {
10 years ago
return {error: '[[error:parse-error]]'};
}
}
return response;
}
module.hideAlerts = function(modal) {
$(modal).find('#alert-status, #alert-success, #alert-error, #upload-progress-box').addClass('hide');
};
return module;
});