Change upload routine, add upload popup

This commit is contained in:
Romulus Urakagi Tsai 2019-12-24 08:57:34 +00:00
parent 6cdd464f54
commit 93337c20f8
5 changed files with 56 additions and 13 deletions

View file

@ -18,6 +18,13 @@ template(name="attachmentDeletePopup")
p {{_ "attachment-delete-pop"}}
button.js-confirm.negate.full(type="submit") {{_ 'delete'}}
template(name="uploadingPopup")
p Uploading...
p
span.upload-percentage 0%
div.upload-progress-bar
span.upload-size {{fileSize}}
template(name="attachmentsGalery")
.attachments-galery
each attachments
@ -53,3 +60,4 @@ template(name="attachmentsGalery")
unless currentUser.isCommentOnly
li.attachment-item.add-attachment
a.js-add-attachment {{_ 'add-attachment' }}

View file

@ -66,18 +66,38 @@ Template.previewAttachedImagePopup.helpers({
}
});
// For uploading popup
let uploadFileSize = new ReactiveVar('');
let uploadProgress = new ReactiveVar(0);
Template.cardAttachmentsPopup.events({
'change .js-attach-file'(event) {
'change .js-attach-file'(event, instance) {
const card = this;
const processFile = f => {
Utils.processUploadedAttachment(card, f,
(err, attachment) => {
const callbacks = {
onBeforeUpload: (err, fileData) => {
Popup.open('uploading')(this.clickEvent);
return true;
},
onUploaded: (err, attachment) => {
console.log('onEnd');
if (attachment && attachment._id && attachment.isImage) {
card.setCover(attachment._id);
}
Popup.close();
},
onStart: (error, fileData) => {
console.log('fd', fileData);
uploadFileSize.set(`${fileData.size} bytes`);
},
onError: (err, fileObj) => {
console.log('Error!', err);
},
onProgress: (progress, fileData) => {
}
);
};
const processFile = f => {
Utils.processUploadedAttachment(card, f, callbacks);
};
FS.Utility.eachFile(event, f => {
@ -117,12 +137,22 @@ Template.cardAttachmentsPopup.events({
});
},
'click .js-computer-upload'(event, templateInstance) {
this.clickEvent = event;
templateInstance.find('.js-attach-file').click();
event.preventDefault();
},
'click .js-upload-clipboard-image': Popup.open('previewClipboardImage'),
});
Template.uploadingPopup.onRendered(() => {
});
Template.uploadingPopup.helpers({
fileSize: () => {
return uploadFileSize.get();
}
});
const MAX_IMAGE_PIXEL = Utils.MAX_IMAGE_PIXEL;
const COMPRESS_RATIO = Utils.IMAGE_COMPRESS_RATIO;
let pastedResults = null;

View file

@ -225,6 +225,7 @@ Template.editor.onRendered(() => {
$summernote.summernote('insertNode', img);
};
const processData = function(fileObj) {
// FIXME: Change to new API
Utils.processUploadedAttachment(
currentCard,
fileObj,

View file

@ -49,7 +49,7 @@ window.Popup = new (class {
// has one. This allows us to position a sub-popup exactly at the same
// position than its parent.
let openerElement;
if (clickFromPopup(evt)) {
if (clickFromPopup(evt) && self._getTopStack()) {
openerElement = self._getTopStack().openerElement;
} else {
self._stack = [];

View file

@ -25,12 +25,7 @@ Utils = {
},
MAX_IMAGE_PIXEL: Meteor.settings.public.MAX_IMAGE_PIXEL,
COMPRESS_RATIO: Meteor.settings.public.IMAGE_COMPRESS_RATIO,
processUploadedAttachment(card, fileObj, callback) {
const next = attachment => {
if (typeof callback === 'function') {
callback(attachment);
}
};
processUploadedAttachment(card, fileObj, callbacks) {
if (!card) {
return onUploaded();
}
@ -50,7 +45,16 @@ Utils = {
settings.meta.cardId = card._id;
}
settings.meta.userId = Meteor.userId();
Attachments.insert(settings).on('end', next);
if (typeof callbacks === 'function') {
settings.onEnd = callbacks;
} else {
for (const key in callbacks) {
if (key.substring(0, 2) === 'on') {
settings[key] = callbacks[key];
}
}
}
Attachments.insert(settings);
},
shrinkImage(options) {
// shrink image to certain size