浏览代码

Merge pull request #311 from ckeditor/t/ckeditor5/1975b

Fix: Worked around Safari's image size bug. Closes ckeditor/ckeditor5#1975.
Piotrek Koszuliński 6 年之前
父节点
当前提交
ac8b7447df
共有 1 个文件被更改,包括 29 次插入0 次删除
  1. 29 0
      packages/ckeditor5-image/src/imageupload/imageuploadediting.js

+ 29 - 0
packages/ckeditor5-image/src/imageupload/imageuploadediting.js

@@ -11,6 +11,7 @@ import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import FileRepository from '@ckeditor/ckeditor5-upload/src/filerepository';
 import Notification from '@ckeditor/ckeditor5-ui/src/notification/notification';
 import UpcastWriter from '@ckeditor/ckeditor5-engine/src/view/upcastwriter';
+import env from '@ckeditor/ckeditor5-utils/src/env';
 
 import ImageUploadCommand from '../../src/imageupload/imageuploadcommand';
 import { isImageType, isLocalImage, fetchLocalImage } from '../../src/imageupload/utils';
@@ -192,6 +193,34 @@ export default class ImageUploadEditing extends Plugin {
 				const viewImg = viewFigure.getChild( 0 );
 				const promise = loader.upload();
 
+				// Force re–paint in Safari. Without it, the image will display with a wrong size.
+				// https://github.com/ckeditor/ckeditor5/issues/1975
+				/* istanbul ignore next */
+				if ( env.isSafari ) {
+					editor.editing.view.once( 'render', () => {
+						// Early returns just to be safe. There might be some code ran
+						// in between the outer scope and this callback.
+						if ( !viewImg.parent ) {
+							return;
+						}
+
+						const domFigure = editor.editing.view.domConverter.mapViewToDom( viewImg.parent );
+
+						if ( !domFigure ) {
+							return;
+						}
+
+						const originalDisplay = domFigure.style.display;
+
+						domFigure.style.display = 'none';
+
+						// Make sure this line will never be removed during minification for having "no effect".
+						domFigure._ckHack = domFigure.offsetHeight;
+
+						domFigure.style.display = originalDisplay;
+					} );
+				}
+
 				editor.editing.view.change( writer => {
 					writer.setAttribute( 'src', data, viewImg );
 				} );