-
Notifications
You must be signed in to change notification settings - Fork 2.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add support for Word's images pasting to Safari #4339
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Works pretty nice! I see that this code had already some partial review in original PR, so there is not much left. For now, I've tested it with jpg, png, and gif. Please, see the review comments.
I also see that you marked this PR as a feature, although the original issue has been reported as a bug. I suppose that we could change it to feature as image support for OS X Word edition.
plugins/pastetools/filter/image.js
Outdated
var blobUrls = removeDuplicates( CKEDITOR.tools.array.filter( imgTags, function( imgTag ) { | ||
return imgTag.match( /^blob:/i ); | ||
} ) ), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I suppose we could extract removeDuplicates
function to array tools as something like CKEDITOR.tools.array.unique
?
plugins/pastetools/filter/image.js
Outdated
return imgTag.match( /^blob:/i ); | ||
} ) ), | ||
promises = CKEDITOR.tools.array.map( blobUrls, function( blobUrl ) { | ||
return convertBlobUrlToBase64( blobUrl ); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
convertToBlobUrlToBase64
could be probably used as higher-order function?
plugins/pastetools/filter/image.js
Outdated
fileType = 'image/png'; | ||
break; | ||
case '47494638': | ||
fileType = 'image/gif'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wow, I didn't know that Word supports GIFs 😅 I was pretty sure they are converted to PNGs.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actually they are converted to PNG… So it works because most browsers support APNG.
Safari in such a case use GIF format. It's strange that it isn't rendered correctly as we have GIF recognition 🤔
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Adding GIF mime type to array of supported image formats seems to do the trick.
plugins/pastetools/filter/image.js
Outdated
header += bytesHeader[ i ].toString( 16 ); | ||
} | ||
|
||
switch ( header ) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's some dark magic 😄 I'm not sure if it should be named header
, probably File signature is more accurate here. It would be good to have real, existing images with these signatures, to confirm that the feature covers all expected image types. These can be checked e.g. here: https://www.filesignatures.net/index.php?search=FFD8FFE0&mode=SIG although I suppose it may be hard to get all spf
, jfif
etc extension examples and I'm not sure if Word is not converting them also into a more unified format.
plugins/ajax/plugin.js
Outdated
@@ -128,12 +136,16 @@ | |||
* @param {String} url The URL from which the data is loaded. | |||
* @param {Function} [callback] A callback function to be called on | |||
* data load. If not provided, the data will be loaded | |||
* synchronously. | |||
* @returns {String} The loaded data. For asynchronous requests, an | |||
* synchronously. Please notice that only text data might be loaded synchrnously. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* synchronously. Please notice that only text data might be loaded synchrnously. | |
* synchronously. Please notice that only text data might be loaded synchronously. |
}, | ||
|
||
// (#1134) | ||
'test load async arraybuffer': function() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We are also missing text
and xml
types. I guess they are probably tested already as we are using them indirectly in ajax logic, but it would be good to check if API works correctly.
|
||
function simulatePasteBlob( editor, assertion, options ) { | ||
// jscs:disable maximumLineLength | ||
var imgBase64 = 'data:image/png;base64,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', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you think it would be possible to use real images instead with more test cases?
if ( !CKEDITOR.env.safari ) { | ||
bender.ignore(); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe it makes sense to keep this test also for different browsers to make sure we didn't introduce regression?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All other browsers are covered by unit tests for Paste Tools, Paste from Word and Paste from Libre Office, so I don't think it would be necessary.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We still need to perform manual tests for images during the testing phase to make sure that we didn't introduce any regression. Enabling these tests on browsers which should support images significantly improves odds that we will actually test it, as generic tests may not have enough test samples.
Please, also ignore this test on mobile.
@bender-ckeditor-plugins: wysiwygarea, toolbar, undo, basicstyles, pastefromword, elementspath, image, format, sourcearea | ||
|
||
1. Open [attached Word document](_assets/Image_safari.docx). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be good to add a more complicated document with more image sources, especially gif and different flavors of jpg.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How can I produce different flavors of JPG? 🤔
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actually we probably don't need to test different flavors of JPG, as all of its signatures starts with the same sequence: FF D8 FF
. Checking if the image file starts with it should be enough for our case.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How can I produce different flavors of JPG?
By using some conversion tool. But indeed making signature-less strict should work. I've checked File Signature Database and it doesn't seem that a less specific signature will catch any other filetype 🤞🏻
Hmm, that can be a little problematic, as |
It's been a while since we last heard from you. We are marking this pull request as stale due to inactivity. Please provide the requested feedback or the pull request will be closed after next 7 days. |
Ok,
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm, that can be a little problematic, as Uint8Array is correct… Seems like jsduck is old enough to not recognize Typed Arrays 🤔
I see that Blob
is correctly recognized, so it's indeed weird that jsduck is not able to read this type. Maybe there is some workaround for custom type? If not, I suppose we will have to rename it into Object
to avoid building warnings? Although, it's pity going some weird workarounds because the tooling doesn't work correctly.
Currently, ajax methods are a bit mixed up. Previously, we had:
load
- loading withtext
responseloadXml
- loading withxml
response
now we have:
load
- by default text, but also supportsxml
andarraybuffer
loadXml
- still supporting onlyxml
Maybe, we should add explicit loadBinaryData/loadData
? It probably doesn't really make sense deprecating loadXml
as explicitness of this method is actually nice. Most readable seems to have load
(without default type), loadText
, loadXml
, loadBinaryData
but it's a bit too late for that.
* arrayWithoutDuplicates = CKEDITOR.tools.array.unique( array ); | ||
* console.log( arrayWithoutDuplicates ); // [ 1, 2, 3 ] | ||
* ``` | ||
* |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing @since
tag and @member CKEDITOR.tools.array
.
plugins/pastetools/filter/image.js
Outdated
@@ -11,7 +11,9 @@ | |||
'use strict'; | |||
|
|||
/** | |||
* Filter handling pasting images from RTF content. | |||
* Filter handling pasting images. In Safari images are extracted |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we have any strict check if it's actually Safari? I suppose it should rather tell that in case of missing RTF it will be using this method?
|
||
## Unexpected | ||
|
||
* Iage is not rendered correctly. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Typo.
if ( !CKEDITOR.env.safari ) { | ||
bender.ignore(); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We still need to perform manual tests for images during the testing phase to make sure that we didn't introduce any regression. Enabling these tests on browsers which should support images significantly improves odds that we will actually test it, as generic tests may not have enough test samples.
Please, also ignore this test on mobile.
@bender-ckeditor-plugins: wysiwygarea, toolbar, undo, basicstyles, pastefromword, elementspath, image, format, sourcearea | ||
|
||
1. Open [attached Word document](_assets/Image_safari.docx). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How can I produce different flavors of JPG?
By using some conversion tool. But indeed making signature-less strict should work. I've checked File Signature Database and it doesn't seem that a less specific signature will catch any other filetype 🤞🏻
function convertBlobUrlToBase64( blobUrlSrc ) { | ||
return new CKEDITOR.tools.promise( function( resolve ) { | ||
CKEDITOR.ajax.load( blobUrlSrc, function( arrayBuffer ) { | ||
var data = new Uint8Array( arrayBuffer ), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm curious about old IE support here (IE8-9) as Uint8Array
is not supported there. However, nothing breaks - seems like we are not supporting image pasting there at all.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, in old IEs this code is just ignored.
@@ -0,0 +1,16 @@ | |||
@bender-tags: feature, 4.16.0, 1134, 2800, pastefromword | |||
@bender-ui: collapsed | |||
@bender-ckeditor-plugins: wysiwygarea, toolbar, undo, pastefromword, image, pagebreak, autogrow |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be good to add sourcearea test steps similar to pasteimagessafari
manual test to make sure that the image is transformed to base64.
plugins/pastetools/filter/image.js
Outdated
@@ -179,6 +164,111 @@ | |||
} | |||
]; | |||
|
|||
/** | |||
* Array of all recognizable image file signatrues with their respective types. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* Array of all recognizable image file signatrues with their respective types. | |
* Recognizable image file signatures with their respective types. |
var image = options && options.image || SAMPLE_PNG, | ||
imageDataUrl = options && options.imageDataUrl || SAMPLE_PNG, | ||
url = getObjectUrl( image, options && options.imageType ), | ||
template = options && options.template || '<p{%CLASS%}>Hello<img style="height:200px; width:200px" src="{%URL%}" />world.</p>', | ||
input = template.replace( /{%URL%}/g, url ).replace( /{%CLASS%}/g, ' class="MsoNormal"' ), | ||
expected = template.replace( /{%URL%}/g, imageDataUrl ).replace( /{%CLASS%}/g, '' ); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The code is a bit unreadable with all default option values. Maybe we could simplify it with some merging logic?
CKEDITOR.tools.object.merge( defaultOptions, options || {} );
plugins/pastetools/filter/image.js
Outdated
return new CKEDITOR.tools.promise( function( resolve ) { | ||
CKEDITOR.ajax.load( blobUrlSrc, function( arrayBuffer ) { | ||
var data = new Uint8Array( arrayBuffer ), | ||
imageType = getImageTypeFromSignature( data.subarray( 0, 4 ) ), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shouldn't we pass here the whole arrayBuffer
? It seems like taking the first 4 characters is already done in getImageTypeFromSignature
function? In that case, this should be probably renamed again to just getImageType
.
Could you also rebase PR onto the latest major? Seems like there are some conficts. |
Ok, I've addressed issues found during the review.
TBH I don't find it's too late. We can always have additional methods and I'll raise an issue for it. |
…nversion of TypedArray is no longer needed.
a869c01
to
8e6392c
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good job!
What is the purpose of this pull request?
New feature
Does your PR contain necessary tests?
All patches that change the editor code must include tests. You can always read more
on PR testing,
how to set the testing environment and
how to create tests
in the official CKEditor documentation.
This PR contains
Did you follow the CKEditor 4 code style guide?
Your code should follow the guidelines from the CKEditor 4 code style guide which helps keep the entire codebase consistent.
What is the proposed changelog entry for this pull request?
What changes did you make?
I've basically taken the contents from @msamsel's #1976 and integrated it with our
CKEDITOR.plugins.pastetools.filters.image
filter.Which issues does your PR resolve?
Closes #1134.