- FIX: make sure we set a default name to a pasted image only on Chrome (the only browser that supports it)
- FIX: use ".json" extension to uploads endpoints since IE9 doesn't pass the correct header
- FIX: pass the CSRF token in a query parameter since IE9 doesn't pass it in the headers
- FIX: display error messages comming from the server when there is one over the default error message
- FIX: HACK around IE9 security issue when clicking a file input via JavaScript (use a label and set `visibility:hidden` on the input)
- FIX: hide the "cancel" upload on IE9 since it's not supported
- FIX: return "text/plain" content-type when uploading a file for IE9 in order to prevent it from displaying the save dialog
- FIX: check the maximum file size on the server 💥
- update jQuery File Upload Plugin to v. 5.42.2
- update JQuery IFram Transport Plugin to v. 1.8.5
- update jQuery UI Widget to v. 1.11.1
73 lines
2.1 KiB
JavaScript
73 lines
2.1 KiB
JavaScript
export default Em.Mixin.create({
|
|
uploading: false,
|
|
uploadProgress: 0,
|
|
|
|
uploadDone: function() {
|
|
Em.warn("You should implement `uploadDone`");
|
|
},
|
|
|
|
deleteDone: function() {
|
|
Em.warn("You should implement `deleteDone`");
|
|
},
|
|
|
|
_initializeUploader: function() {
|
|
var $upload = this.$(),
|
|
self = this,
|
|
csrf = Discourse.Session.currentProp("csrfToken");
|
|
|
|
$upload.fileupload({
|
|
url: this.get('uploadUrl') + ".json?authenticity_token=" + encodeURIComponent(csrf),
|
|
dataType: "json",
|
|
dropZone: $upload,
|
|
pasteZone: $upload
|
|
});
|
|
|
|
$upload.on('fileuploadsubmit', function (e, data) {
|
|
var isValid = Discourse.Utilities.validateUploadedFiles(data.files, true);
|
|
var form = { image_type: self.get('type') };
|
|
if (self.get("data")) { form = $.extend(form, self.get("data")); }
|
|
data.formData = form;
|
|
self.setProperties({ uploadProgress: 0, uploading: isValid });
|
|
return isValid;
|
|
});
|
|
|
|
$upload.on("fileuploadprogressall", function(e, data) {
|
|
var progress = parseInt(data.loaded / data.total * 100, 10);
|
|
self.set("uploadProgress", progress);
|
|
});
|
|
|
|
$upload.on("fileuploaddone", function(e, data) {
|
|
if (data.result) {
|
|
if (data.result.url) {
|
|
self.uploadDone(data);
|
|
} else {
|
|
if (data.result.message) {
|
|
bootbox.alert(data.result.message);
|
|
} else if (data.result.length > 0) {
|
|
bootbox.alert(data.result.join("\n"));
|
|
} else {
|
|
bootbox.alert(I18n.t('post.errors.upload'));
|
|
}
|
|
}
|
|
} else {
|
|
bootbox.alert(I18n.t('post.errors.upload'));
|
|
}
|
|
});
|
|
|
|
$upload.on("fileuploadfail", function(e, data) {
|
|
Discourse.Utilities.displayErrorForUpload(data);
|
|
});
|
|
|
|
$upload.on("fileuploadalways", function() {
|
|
self.setProperties({ uploading: false, uploadProgress: 0});
|
|
});
|
|
}.on('didInsertElement'),
|
|
|
|
_destroyUploader: function() {
|
|
var $upload = this.$();
|
|
try { $upload.fileupload('destroy'); }
|
|
catch (e) { /* wasn't initialized yet */ }
|
|
$upload.off();
|
|
}.on('willDestroyElement')
|
|
});
|