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"}} p {{_ "attachment-delete-pop"}}
button.js-confirm.negate.full(type="submit") {{_ 'delete'}} 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") template(name="attachmentsGalery")
.attachments-galery .attachments-galery
each attachments each attachments
@ -53,3 +60,4 @@ template(name="attachmentsGalery")
unless currentUser.isCommentOnly unless currentUser.isCommentOnly
li.attachment-item.add-attachment li.attachment-item.add-attachment
a.js-add-attachment {{_ '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({ Template.cardAttachmentsPopup.events({
'change .js-attach-file'(event) { 'change .js-attach-file'(event, instance) {
const card = this; const card = this;
const processFile = f => { const callbacks = {
Utils.processUploadedAttachment(card, f, onBeforeUpload: (err, fileData) => {
(err, attachment) => { Popup.open('uploading')(this.clickEvent);
return true;
},
onUploaded: (err, attachment) => {
console.log('onEnd');
if (attachment && attachment._id && attachment.isImage) { if (attachment && attachment._id && attachment.isImage) {
card.setCover(attachment._id); card.setCover(attachment._id);
} }
Popup.close(); 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 => { FS.Utility.eachFile(event, f => {
@ -117,12 +137,22 @@ Template.cardAttachmentsPopup.events({
}); });
}, },
'click .js-computer-upload'(event, templateInstance) { 'click .js-computer-upload'(event, templateInstance) {
this.clickEvent = event;
templateInstance.find('.js-attach-file').click(); templateInstance.find('.js-attach-file').click();
event.preventDefault(); event.preventDefault();
}, },
'click .js-upload-clipboard-image': Popup.open('previewClipboardImage'), '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 MAX_IMAGE_PIXEL = Utils.MAX_IMAGE_PIXEL;
const COMPRESS_RATIO = Utils.IMAGE_COMPRESS_RATIO; const COMPRESS_RATIO = Utils.IMAGE_COMPRESS_RATIO;
let pastedResults = null; let pastedResults = null;

View file

@ -225,6 +225,7 @@ Template.editor.onRendered(() => {
$summernote.summernote('insertNode', img); $summernote.summernote('insertNode', img);
}; };
const processData = function(fileObj) { const processData = function(fileObj) {
// FIXME: Change to new API
Utils.processUploadedAttachment( Utils.processUploadedAttachment(
currentCard, currentCard,
fileObj, 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 // has one. This allows us to position a sub-popup exactly at the same
// position than its parent. // position than its parent.
let openerElement; let openerElement;
if (clickFromPopup(evt)) { if (clickFromPopup(evt) && self._getTopStack()) {
openerElement = self._getTopStack().openerElement; openerElement = self._getTopStack().openerElement;
} else { } else {
self._stack = []; self._stack = [];

View file

@ -25,12 +25,7 @@ Utils = {
}, },
MAX_IMAGE_PIXEL: Meteor.settings.public.MAX_IMAGE_PIXEL, MAX_IMAGE_PIXEL: Meteor.settings.public.MAX_IMAGE_PIXEL,
COMPRESS_RATIO: Meteor.settings.public.IMAGE_COMPRESS_RATIO, COMPRESS_RATIO: Meteor.settings.public.IMAGE_COMPRESS_RATIO,
processUploadedAttachment(card, fileObj, callback) { processUploadedAttachment(card, fileObj, callbacks) {
const next = attachment => {
if (typeof callback === 'function') {
callback(attachment);
}
};
if (!card) { if (!card) {
return onUploaded(); return onUploaded();
} }
@ -50,7 +45,16 @@ Utils = {
settings.meta.cardId = card._id; settings.meta.cardId = card._id;
} }
settings.meta.userId = Meteor.userId(); 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) { shrinkImage(options) {
// shrink image to certain size // shrink image to certain size