瀏覽代碼

Used writer instead of engine's private API.

Kamil Piechaczek 7 年之前
父節點
當前提交
80d28c21c9

+ 2 - 2
packages/ckeditor5-list/src/converters.js

@@ -795,10 +795,10 @@ function generateLiInUl( modelItem, conversionApi ) {
 	const mapper = conversionApi.mapper;
 	const viewWriter = conversionApi.writer;
 	const listType = modelItem.getAttribute( 'type' ) == 'numbered' ? 'ol' : 'ul';
-	const viewItem = createViewListItemElement();
+	const viewItem = createViewListItemElement( viewWriter );
 
 	const viewList = viewWriter.createContainerElement( listType, null );
-	viewList._appendChildren( viewItem );
+	viewWriter.insert( ViewPosition.createAt( viewList ), viewItem );
 
 	mapper.bindElements( modelItem, viewItem );
 

+ 3 - 4
packages/ckeditor5-list/src/utils.js

@@ -3,8 +3,6 @@
  * For licensing, see LICENSE.md.
  */
 
-import ViewContainerElement from '@ckeditor/ckeditor5-engine/src/view/containerelement';
-
 /**
  * @module list/utils
  */
@@ -12,10 +10,11 @@ import ViewContainerElement from '@ckeditor/ckeditor5-engine/src/view/containere
 /**
  * Creates list item {@link module:engine/view/containerelement~ContainerElement}.
  *
+ * @param {module:engine/view/writer~Writer} writer The writer instance.
  * @returns {module:engine/view/containerelement~ContainerElement}
  */
-export function createViewListItemElement() {
-	const viewItem = new ViewContainerElement( 'li' );
+export function createViewListItemElement( writer ) {
+	const viewItem = writer.createContainerElement( 'li' );
 	viewItem.getFillerOffset = getFillerOffset;
 
 	return viewItem;

+ 22 - 8
packages/ckeditor5-list/tests/listediting.js

@@ -3625,7 +3625,11 @@ describe( 'ListEditing', () => {
 			const uiElement = new ViewUIElement( 'span' );
 
 			// Append ui element at the end of first <li>.
-			viewDoc.getRoot().getChild( 0 ).getChild( 0 )._appendChildren( [ uiElement ] );
+			view.change( writer => {
+				const firstChild = viewDoc.getRoot().getChild( 0 ).getChild( 0 );
+
+				writer.insert( ViewPosition.createAt( firstChild, 'end' ), uiElement );
+			} );
 
 			expect( getViewData( editor.editing.view, { withoutSelection: true } ) )
 				.to.equal( '<ul><li>Foo<span></span></li><li>Bar</li></ul>' );
@@ -3647,7 +3651,11 @@ describe( 'ListEditing', () => {
 			const uiElement = new ViewUIElement( 'span' );
 
 			// Append ui element at the end of first <li>.
-			viewRoot.getChild( 0 ).getChild( 0 )._appendChildren( [ uiElement ] );
+			view.change( writer => {
+				const firstChild = viewDoc.getRoot().getChild( 0 ).getChild( 0 );
+
+				writer.insert( ViewPosition.createAt( firstChild, 'end' ), uiElement );
+			} );
 
 			expect( getViewData( editor.editing.view, { withoutSelection: true } ) )
 				.to.equal( '<ul><li>Foo<span></span></li><li>Bar<ul><li>Xxx</li><li>Yyy</li></ul></li></ul>' );
@@ -3674,8 +3682,10 @@ describe( 'ListEditing', () => {
 			} );
 
 			it( 'ui element before <ul>', () => {
-				// Append ui element before <ul>.
-				viewRoot._insertChildren( 0, [ uiElement ] );
+				view.change( writer => {
+					// Append ui element before <ul>.
+					writer.insert( ViewPosition.createAt( viewRoot ), uiElement );
+				} );
 
 				model.change( writer => {
 					writer.remove( liFoo );
@@ -3686,8 +3696,10 @@ describe( 'ListEditing', () => {
 			} );
 
 			it( 'ui element before first <li>', () => {
-				// Append ui element before <ul>.
-				viewRoot.getChild( 0 )._insertChildren( 0, [ uiElement ] );
+				view.change( writer => {
+					// Append ui element before <ul>.
+					writer.insert( ViewPosition.createAt( viewRoot.getChild( 0 ) ), uiElement );
+				} );
 
 				model.change( writer => {
 					writer.remove( liFoo );
@@ -3698,8 +3710,10 @@ describe( 'ListEditing', () => {
 			} );
 
 			it( 'ui element in the middle of list', () => {
-				// Append ui element before <ul>.
-				viewRoot.getChild( 0 )._insertChildren( 1, [ uiElement ] );
+				view.change( writer => {
+					// Append ui element before <ul>.
+					writer.insert( ViewPosition.createAt( viewRoot.getChild( 0 ), 'end' ), uiElement );
+				} );
 
 				model.change( writer => {
 					writer.remove( liBar );

+ 37 - 13
packages/ckeditor5-list/tests/utils.js

@@ -4,45 +4,69 @@
  */
 
 import ViewContainerElement from '@ckeditor/ckeditor5-engine/src/view/containerelement';
-import ViewText from '@ckeditor/ckeditor5-engine/src/view/text';
+import ViewPosition from '@ckeditor/ckeditor5-engine/src/view/position';
+import ViewWriter from '@ckeditor/ckeditor5-engine/src/view/writer';
 import { createViewListItemElement } from '../src/utils';
 
 describe( 'utils', () => {
+	let writer;
+
+	beforeEach( () => {
+		writer = new ViewWriter( {} );
+	} );
+
 	describe( 'createViewListItemElement()', () => {
 		it( 'should create ViewContainerElement', () => {
-			const item = createViewListItemElement();
+			const item = createViewListItemElement( writer );
 
 			expect( item ).to.be.instanceof( ViewContainerElement );
 		} );
 
 		it( 'should have li name', () => {
-			const item = createViewListItemElement();
+			const item = createViewListItemElement( writer );
 
 			expect( item.name ).to.equal( 'li' );
 		} );
 
 		describe( 'getFillerOffset', () => {
 			it( 'should return 0 if item is empty', () => {
-				const item = createViewListItemElement();
+				const item = createViewListItemElement( writer );
 
 				expect( item.getFillerOffset() ).to.equal( 0 );
 			} );
 
 			it( 'should return 0 if item has only lists as children', () => {
-				const innerListItem1 = createViewListItemElement();
-				innerListItem1._appendChildren( new ViewText( 'foo' ) );
-				const innerListItem2 = createViewListItemElement();
-				innerListItem2._appendChildren( new ViewText( 'bar' ) );
-				const innerList = new ViewContainerElement( 'ul', null, [ innerListItem1, innerListItem2 ] );
-				const outerListItem = createViewListItemElement();
-				outerListItem._appendChildren( innerList );
+				const innerListItem1 = createViewListItemElement( writer );
+
+				writer.insert(
+					ViewPosition.createAt( innerListItem1 ),
+					writer.createText( 'foo' )
+				);
+
+				const innerListItem2 = createViewListItemElement( writer );
+
+				writer.insert(
+					ViewPosition.createAt( innerListItem2 ),
+					writer.createText( 'bar' )
+				);
+
+				const innerList = writer.createContainerElement( 'ul' );
+				writer.insert( ViewPosition.createAt( innerList ), innerListItem1 );
+				writer.insert( ViewPosition.createAt( innerList ), innerListItem2 );
+
+				const outerListItem = createViewListItemElement( writer );
+				writer.insert( ViewPosition.createAt( outerListItem ), innerList );
 
 				expect( outerListItem.getFillerOffset() ).to.equal( 0 );
 			} );
 
 			it( 'should return null if item has non-list contents', () => {
-				const item = createViewListItemElement();
-				item._appendChildren( new ViewText( 'foo' ) );
+				const item = createViewListItemElement( writer );
+
+				writer.insert(
+					ViewPosition.createAt( item ),
+					writer.createText( 'foo' )
+				);
 
 				expect( item.getFillerOffset() ).to.be.null;
 			} );