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

118 lines
3.3 KiB
JavaScript
Raw Normal View History

2015-01-10 19:48:00 -05:00
'use strict';
2015-09-26 00:08:26 -04:00
/* globals define, templates, translator */
2015-01-10 19:48:00 -05:00
define('uploader', ['csrf', 'translator'], function(csrf, translator) {
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) {
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,
2016-02-29 14:23:12 +02:00
fileSize: data.hasOwnProperty('fileSize') && data.fileSize !== undefined ? parseInt(data.fileSize, 10) : false,
title: data.title || '[[global:upload_file]]',
description: data.description || '',
button: data.button || '[[global:upload]]',
accept: data.accept ? data.accept.replace(/,/g, ',') : ''
}, function(uploadModal) {
2015-09-26 00:08:26 -04:00
uploadModal = $(uploadModal);
2015-09-26 00:08:26 -04:00
uploadModal.modal('show');
uploadModal.on('hidden.bs.modal', function() {
uploadModal.remove();
});
2015-09-26 00:08:26 -04:00
var uploadForm = uploadModal.find('#uploadForm');
uploadForm.attr('action', data.route);
uploadForm.find('#params').val(JSON.stringify(data.params));
2016-02-29 14:23:12 +02:00
uploadModal.find('#fileUploadSubmitBtn').off('click').on('click', function() {
2015-09-26 00:08:26 -04:00
uploadForm.submit();
});
2015-09-26 00:08:26 -04:00
uploadForm.off('submit').submit(function() {
2015-09-26 00:08:26 -04:00
function showAlert(type, message) {
module.hideAlerts(uploadModal);
2015-10-03 18:13:35 -04:00
uploadModal.find('#alert-' + type).translateText(message).removeClass('hide');
2015-09-26 00:08:26 -04:00
}
2015-09-26 00:08:26 -04:00
showAlert('status', '[[uploads:uploading-file]]');
2015-09-26 00:08:26 -04:00
uploadModal.find('#upload-progress-bar').css('width', '0%');
uploadModal.find('#upload-progress-box').show().removeClass('hide');
2015-01-10 19:48:00 -05:00
2016-02-29 14:23:12 +02:00
if (!uploadModal.find('#fileInput').val()) {
2015-09-26 00:08:26 -04:00
showAlert('error', '[[uploads:select-file-to-upload]]');
return false;
}
2015-09-26 00:08:26 -04:00
$(this).ajaxSubmit({
headers: {
'x-csrf-token': csrf.get()
},
error: function(xhr) {
xhr = maybeParse(xhr);
2016-02-16 18:04:02 +02:00
showAlert('error', xhr.responseJSON ? (xhr.responseJSON.error || xhr.statusText) : 'error uploading, code : ' + xhr.status);
2015-09-26 00:08:26 -04:00
},
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() {
2015-10-03 17:58:06 -04:00
module.hideAlerts(uploadModal);
2015-09-26 00:08:26 -04:00
uploadModal.modal('hide');
}, 750);
}
});
return false;
});
});
};
function parseModal(tplVals, callback) {
2016-02-29 14:24:02 +02:00
templates.parse('partials/modals/upload_file_modal', tplVals, function(html) {
2015-09-26 00:08:26 -04:00
translator.translate(html, callback);
});
}
2015-01-10 19:48:00 -05:00
function maybeParse(response) {
if (typeof response === 'string') {
try {
return $.parseJSON(response);
} catch (e) {
2015-01-12 17:33:11 -05:00
return {error: '[[error:parse-error]]'};
2015-01-10 19:48:00 -05:00
}
}
return response;
}
2015-09-26 00:08:26 -04:00
module.hideAlerts = function(modal) {
$(modal).find('#alert-status, #alert-success, #alert-error, #upload-progress-box').addClass('hide');
};
return module;
2014-04-10 20:31:57 +01:00
});