Selaa lähdekoodia

Merge pull request #1455 from ckeditor/t/1451-2

Internal: Added `withChildren: false` parameter missing after refactoring and unit test covering that case. Closes #1451. Closes #1452.
Piotrek Koszuliński 7 vuotta sitten
vanhempi
commit
13c4eff034

+ 1 - 1
packages/ckeditor5-engine/src/view/renderer.js

@@ -256,7 +256,7 @@ export default class Renderer {
 
 		const actualDomChildren = this.domConverter.mapViewToDom( viewElement ).childNodes;
 		const expectedDomChildren = Array.from(
-			this.domConverter.viewChildrenToDom( viewElement, domElement.ownerDocument )
+			this.domConverter.viewChildrenToDom( viewElement, domElement.ownerDocument, { withChildren: false } )
 		);
 		const diff = this._diffNodeLists( actualDomChildren, expectedDomChildren );
 		const actions = this._findReplaceActions( diff, actualDomChildren, expectedDomChildren );

+ 30 - 0
packages/ckeditor5-engine/tests/view/renderer.js

@@ -1683,6 +1683,36 @@ describe( 'Renderer', () => {
 			);
 		} );
 
+		// #1451
+		it( 'should correctly render changed children even if direct parent is not marked to sync', () => {
+			const inputView =
+				'<container:ul>' +
+					'<container:li>Foo</container:li>' +
+					'<container:li><attribute:b>Bar</attribute:b></container:li>' +
+				'</container:ul>';
+
+			const view = parse( inputView );
+
+			viewRoot._appendChild( view );
+
+			renderer.markToSync( 'children', viewRoot );
+			renderer.render();
+
+			expect( domRoot.innerHTML ).to.equal( '<ul><li>Foo</li><li><b>Bar</b></li></ul>' );
+
+			const viewLi = view.getChild( 0 );
+			const viewLiIndented = view._removeChildren( 1, 1 ); // Array with one element.
+			viewLiIndented[ 0 ]._appendChild( parse( '<attribute:i>Baz</attribute:i>' ) );
+			const viewUl = new ViewContainerElement( 'ul', null, viewLiIndented );
+			viewLi._appendChild( viewUl );
+
+			renderer.markToSync( 'children', view );
+			renderer.markToSync( 'children', viewLi );
+			renderer.render();
+
+			expect( domRoot.innerHTML ).to.equal( '<ul><li>Foo<ul><li><b>Bar</b><i>Baz</i></li></ul></li></ul>' );
+		} );
+
 		describe( 'fake selection', () => {
 			beforeEach( () => {
 				const { view: viewP, selection: newSelection } = parse(