Selaa lähdekoodia

Simplified figure conversion.

Oskar Wróbel 7 vuotta sitten
vanhempi
commit
ad51635af6

+ 6 - 21
packages/ckeditor5-image/src/image/converters.js

@@ -39,32 +39,17 @@ export function viewFigureToModel() {
 			return;
 		}
 
-		// Find allowed ancestor in model for image that is gong to be inserted.
-		const splitResult = conversionApi.splitToAllowedParent( 'image', data.modelCursor );
-
-		// Do not convert if image cannot be placed in model at current position and in any of ancestors.
-		if ( !splitResult ) {
-			return;
-		}
-
 		// Convert view image to model image and save result as a conversion result.
-		// Image is an object, so we are sure that it won't be split so at this stage of conversion
-		// modelCursor and modelRange ends after converted image.
-		data = Object.assign( data, conversionApi.convertItem( viewImage, splitResult.position ) );
-
-		// Consume figure from consumable list.
-		conversionApi.consumable.consume( data.viewItem, { name: true, class: 'image' } );
+		// Image is an object, so we are sure that it won't be split by it's children.
+		data = Object.assign( data, conversionApi.convertItem( viewImage, data.modelCursor ) );
 
 		// Get image element from conversion result.
 		const modelImage = first( data.modelRange.getItems() );
 
-		// Convert rest of the figure element's children as an image children.
-		conversionApi.convertChildren( data.viewItem, ModelPosition.createAt( modelImage ) );
-
-		// When parent of current modelCursor had to be split to insert image let's
-		// continue conversion inside split element.
-		if ( splitResult.cursorParent ) {
-			data.modelCursor = ModelPosition.createAt( splitResult.cursorParent );
+		// When image was successfully converted.
+		if ( modelImage ) {
+			// Convert rest of the figure element's children as an image children.
+			conversionApi.convertChildren( data.viewItem, ModelPosition.createAt( modelImage ) );
 		}
 	};
 }

+ 7 - 12
packages/ckeditor5-image/tests/image/converters.js

@@ -13,6 +13,7 @@ import { toImageWidget } from '../../src/image/utils';
 import buildModelConverter from '@ckeditor/ckeditor5-engine/src/conversion/buildmodelconverter';
 import buildViewConverter from '@ckeditor/ckeditor5-engine/src/conversion/buildviewconverter';
 import ModelRange from '@ckeditor/ckeditor5-engine/src/model/range';
+import ModelElement from '@ckeditor/ckeditor5-engine/src/model/element';
 import { getData as getViewData } from '@ckeditor/ckeditor5-engine/src/dev-utils/view';
 import { setData as setModelData, getData as getModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
 
@@ -53,8 +54,6 @@ describe( 'Image converters', () => {
 		let dispatcher, schema, imgConverterCalled;
 
 		beforeEach( () => {
-			imgConverterCalled = false;
-
 			// Since this part of test tests only view->model conversion editing pipeline is not necessary
 			// so defining model->view converters won't be necessary.
 			editor.editing.destroy();
@@ -64,18 +63,14 @@ describe( 'Image converters', () => {
 
 			dispatcher = editor.data.viewToModel;
 			dispatcher.on( 'element:figure', viewFigureToModel() );
-			dispatcher.on( 'element:img', ( evt, data, conversionApi ) => {
-				if ( conversionApi.consumable.consume( data.viewItem, { name: true, attribute: 'src' } ) ) {
-					const image = conversionApi.writer.createElement( 'image', { src: data.viewItem.getAttribute( 'src' ) } );
-
-					conversionApi.writer.insert( image, data.modelCursor );
-
-					data.modelRange = ModelRange.createOn( image );
-					data.modelCursor = data.modelRange.end;
 
+			buildViewConverter().for( dispatcher )
+				.from( { name: 'img', attribute: { src: true } } )
+				.toElement( viewImage => {
 					imgConverterCalled = true;
-				}
-			} );
+
+					return new ModelElement( 'image', { src: viewImage.getAttribute( 'src' ) } );
+				} );
 		} );
 
 		it( 'should find img element among children and convert it using already defined converters', () => {