Sfoglia il codice sorgente

Split parent element on Enter.

Oskar Wróbel 6 anni fa
parent
commit
1b1169b160

+ 6 - 1
packages/ckeditor5-widget/src/widget.js

@@ -272,9 +272,14 @@ export default class Widget extends Plugin {
 
 		if ( objectElement && model.schema.isObject( objectElement ) ) {
 			model.change( writer => {
+				let position = writer.createPositionAt( objectElement, isBackwards ? 'before' : 'after' );
 				const paragraph = writer.createElement( 'paragraph' );
 
-				writer.insert( paragraph, objectElement, isBackwards ? 'before' : 'after' );
+				if ( !model.schema.isLimit( objectElement.parent ) ) {
+					position = writer.split( position ).position;
+				}
+
+				writer.insert( paragraph, position );
 				writer.setSelection( paragraph, 'in' );
 			} );
 

+ 23 - 0
packages/ckeditor5-widget/tests/widget.js

@@ -728,6 +728,29 @@ describe( 'Widget', () => {
 				keyCodes.enter,
 				'<paragraph>f[]ar</paragraph>'
 			);
+
+			it( 'should split parent when widget is inside block element', () => {
+				model.schema.register( 'parent', {
+					inheritAllFrom: '$block'
+				} );
+				model.schema.extend( 'widget', {
+					allowIn: [ 'parent' ]
+				} );
+
+				editor.conversion.for( 'downcast' ).elementToElement( { model: 'parent', view: 'parent' } );
+
+				setModelData( model, '<parent>[<widget></widget>]</parent>' );
+
+				viewDocument.fire( 'keydown', new DomEventData(
+					viewDocument,
+					{ target: document.createElement( 'div' ), preventDefault() {} },
+					{ keyCode: keyCodes.enter }
+				) );
+
+				expect( getModelData( model ) ).to.equal(
+					'<parent><widget></widget></parent><paragraph>[]</paragraph><parent></parent>'
+				);
+			} );
 		} );
 
 		function test( name, data, keyCodeOrMock, expected, expectedView ) {