diff options
author | Lauri Ojansivu <x@xet7.org> | 2019-08-11 19:26:05 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-11 19:26:05 +0300 |
commit | 2859457600a29ae783f165d7edd8825f40859f02 (patch) | |
tree | a8ca7378d1a9c38db66de26b00fb04de0aa33993 | |
parent | 30680f13d67e31a551511b9e6e24d807a2c8064d (diff) | |
parent | 4857bce5d953ba3299a1de4c1894a96913d4d857 (diff) | |
download | wekan-2859457600a29ae783f165d7edd8825f40859f02.tar.gz wekan-2859457600a29ae783f165d7edd8825f40859f02.tar.bz2 wekan-2859457600a29ae783f165d7edd8825f40859f02.zip |
Merge pull request #2608 from whowillcare/master
Make image upload in summernote as attachment to wekan board instead of base64 string and more
-rw-r--r-- | .meteor-1.6-snap/package.json | 13 | ||||
-rw-r--r-- | client/components/cards/attachments.js | 27 | ||||
-rwxr-xr-x | client/components/main/editor.js | 65 | ||||
-rw-r--r-- | client/lib/utils.js | 25 | ||||
-rw-r--r-- | package.json | 1 | ||||
-rw-r--r-- | snapcraft.yaml | 10 |
6 files changed, 97 insertions, 44 deletions
diff --git a/.meteor-1.6-snap/package.json b/.meteor-1.6-snap/package.json index cff817b0..c8ddd53f 100644 --- a/.meteor-1.6-snap/package.json +++ b/.meteor-1.6-snap/package.json @@ -53,16 +53,21 @@ "prettier-eslint": "^8.8.2" }, "dependencies": { - "@babel/runtime": "^7.1.2", + "@babel/runtime": "^7.5.4", + "ajv": "^5.0.0", "babel-runtime": "^6.26.0", - "bson-ext": "^2.0.0", + "bcrypt": "^3.0.2", + "bson": "^4.0.0", + "bunyan": "^1.8.12", "es6-promise": "^4.2.4", - "hoek": "^5.0.4", + "gridfs-stream": "^0.5.3", + "ldapjs": "^1.0.2", "meteor-node-stubs": "^0.4.1", + "mongodb": "^2.2.19", "os": "^0.1.1", "page": "^1.8.6", "qs": "^6.5.2", - "source-map-support": "^0.5.9", + "source-map-support": "^0.5.12", "xss": "^1.0.6" } } diff --git a/client/components/cards/attachments.js b/client/components/cards/attachments.js index d60169c3..843f1eb7 100644 --- a/client/components/cards/attachments.js +++ b/client/components/cards/attachments.js @@ -55,27 +55,12 @@ Template.cardAttachmentsPopup.events({ 'change .js-attach-file'(event) { const card = this; const processFile = f => { - const file = new FS.File(f); - if (card.isLinkedCard()) { - file.boardId = Cards.findOne(card.linkedId).boardId; - file.cardId = card.linkedId; - } else { - file.boardId = card.boardId; - file.swimlaneId = card.swimlaneId; - file.listId = card.listId; - file.cardId = card._id; - } - file.userId = Meteor.userId(); - if (file.original) { - file.original.name = f.name; - } - const attachment = Attachments.insert(file); - - if (attachment && attachment._id && attachment.isImage()) { - card.setCover(attachment._id); - } - - Popup.close(); + Utils.processUploadedAttachment(card, f, attachment => { + if (attachment && attachment._id && attachment.isImage()) { + card.setCover(attachment._id); + } + Popup.close(); + }); }; FS.Utility.eachFile(event, f => { diff --git a/client/components/main/editor.js b/client/components/main/editor.js index e217e113..248f4588 100755 --- a/client/components/main/editor.js +++ b/client/components/main/editor.js @@ -176,36 +176,71 @@ Template.editor.onRendered(() => { const $summernote = getSummernote(this); if (files && files.length > 0) { const image = files[0]; - const reader = new FileReader(); + const currentCard = Cards.findOne(Session.get('currentCard')); const MAX_IMAGE_PIXEL = Utils.MAX_IMAGE_PIXEL; const COMPRESS_RATIO = Utils.IMAGE_COMPRESS_RATIO; - const processData = function(dataURL) { + const insertImage = src => { const img = document.createElement('img'); - img.src = dataURL; + img.src = src; img.setAttribute('width', '100%'); $summernote.summernote('insertNode', img); }; - reader.onload = function(e) { - const dataurl = e && e.target && e.target.result; - if (dataurl !== undefined) { - if (MAX_IMAGE_PIXEL) { + const processData = function(fileObj) { + Utils.processUploadedAttachment( + currentCard, + fileObj, + attachment => { + if ( + attachment && + attachment._id && + attachment.isImage() + ) { + attachment.one('uploaded', function() { + const maxTry = 3; + const checkItvl = 500; + let retry = 0; + const checkUrl = function() { + // even though uploaded event fired, attachment.url() is still null somehow //TODO + const url = attachment.url(); + if (url) { + insertImage(url); + } else { + retry++; + if (retry < maxTry) { + setTimeout(checkUrl, checkItvl); + } + } + }; + checkUrl(); + }); + } + }, + ); + }; + if (MAX_IMAGE_PIXEL) { + const reader = new FileReader(); + reader.onload = function(e) { + const dataurl = e && e.target && e.target.result; + if (dataurl !== undefined) { // need to shrink image Utils.shrinkImage({ dataurl, maxSize: MAX_IMAGE_PIXEL, ratio: COMPRESS_RATIO, - callback(changed) { - if (changed !== false && !!changed) { - processData(changed); + toBlob: true, + callback(blob) { + if (blob !== false) { + blob.name = image.name; + processData(blob); } }, }); - } else { - processData(dataurl); } - } - }; - reader.readAsDataURL(image); + }; + reader.readAsDataURL(image); + } else { + processData(image); + } } }, onPaste() { diff --git a/client/lib/utils.js b/client/lib/utils.js index f81e691c..81835929 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -26,6 +26,31 @@ 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); + } + }; + if (!card) { + return next(); + } + const file = new FS.File(fileObj); + if (card.isLinkedCard()) { + file.boardId = Cards.findOne(card.linkedId).boardId; + file.cardId = card.linkedId; + } else { + file.boardId = card.boardId; + file.swimlaneId = card.swimlaneId; + file.listId = card.listId; + file.cardId = card._id; + } + file.userId = Meteor.userId(); + if (file.original) { + file.original.name = fileObj.name; + } + return next(Attachments.insert(file)); + }, shrinkImage(options) { // shrink image to certain size const dataurl = options.dataurl, diff --git a/package.json b/package.json index 670569fc..c8ddd53f 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "dependencies": { "@babel/runtime": "^7.5.4", "ajv": "^5.0.0", + "babel-runtime": "^6.26.0", "bcrypt": "^3.0.2", "bson": "^4.0.0", "bunyan": "^1.8.12", diff --git a/snapcraft.yaml b/snapcraft.yaml index 90feb776..7073aa51 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -201,6 +201,7 @@ parts: rm -rf package-lock.json .build meteor add standard-minifier-js --allow-superuser meteor npm install --allow-superuser + meteor npm install --allow-superuser --save babel-runtime meteor build .build --directory --allow-superuser cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js #Removed binary version of bcrypt because of security vulnerability that is not fixed yet. @@ -214,15 +215,16 @@ parts: # Change to directory .build/bundle/programs/server cd .build/bundle/programs/server npm install + npm install --allow-superuser --save babel-runtime #meteor npm install --save bcrypt # Change back to Wekan source directory cd ../../../.. cp -r .build/bundle/* $SNAPCRAFT_PART_INSTALL/ cp .build/bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/ - rm $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan - rm $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs - rm $SNAPCRAFT_PART_INSTALL/lib/node_modules/node-pre-gyp/node_modules/tar/lib/.mkdir.js.swp - rm $SNAPCRAFT_PART_INSTALL/lib/node_modules/node-gyp/node_modules/tar/lib/.mkdir.js.swp + rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan + rm -f $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs + rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/node-pre-gyp/node_modules/tar/lib/.mkdir.js.swp + rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/node-gyp/node_modules/tar/lib/.mkdir.js.swp organize: README: README.wekan prime: |