瀏覽代碼

Changed: alt attribute will be converted only for <img> elements.
Tests: added test checking converters behaviour for <figure> with multiple <img> elements.

Szymon Cofalik 8 年之前
父節點
當前提交
05c8e28f06

+ 4 - 3
packages/ckeditor5-image/src/image/imageengine.js

@@ -57,12 +57,13 @@ export default class ImageEngine extends Plugin {
 		// Build converter for view img element to model image element.
 		buildViewConverter().for( data.viewToModel )
 			.from( { name: 'img', attribute: { src: /./ } } )
-			.toElement( viewImage => new ModelElement( 'image', { src: viewImage.getAttribute( 'src' ) } ) );
+			.toElement( ( viewImage ) => new ModelElement( 'image', { src: viewImage.getAttribute( 'src' ) } ) );
 
 		// Build converter for alt attribute.
 		buildViewConverter().for( data.viewToModel )
-			.fromAttribute( 'alt' )
-			.toAttribute( 'alt' );
+			.from( { name: 'img', attribute: { alt: /./ } } )
+			.consuming( { attribute: [ 'alt' ] } )
+			.toAttribute( ( viewImage ) => ( { key: 'alt', value: viewImage.getAttribute( 'alt' ) } ) );
 
 		// Converter for figure element from view to model.
 		data.viewToModel.on( 'element:figure', viewFigureToModel() );

+ 22 - 0
packages/ckeditor5-image/tests/image/imageengine.js

@@ -147,6 +147,28 @@ describe( 'ImageEngine', () => {
 				expect( getModelData( document, { withoutSelection: true } ) )
 					.to.equal( '<image alt="alt text" src="foo.png"></image>' );
 			} );
+
+			it( 'should not convert alt attribute on non-img element', () => {
+				const data = editor.data;
+				const editing = editor.editing;
+
+				document.schema.registerItem( 'div', '$block' );
+
+				buildModelConverter().for( data.modelToView, editing.modelToView ).fromElement( 'div' ).toElement( 'div' );
+				buildViewConverter().for( data.viewToModel ).fromElement( 'div' ).toElement( 'div' );
+
+				editor.setData( '<div alt="foo"></div>' );
+
+				expect( getModelData( document, { withoutSelection: true } ) ).to.equal( '<div></div>' );
+			} );
+
+			it( 'should handle figure with two images', () => {
+				document.schema.allow( { name: '$text', inside: 'image' } );
+
+				editor.setData( '<figure class="image"><img src="foo.jpg" /><img src="bar.jpg" />abc</figure>' );
+
+				expect( getModelData( document, { withoutSelection: true } ) ).to.equal( '<image src="foo.jpg">abc</image>' );
+			} );
 		} );
 	} );