浏览代码

Merge branch 'master' into t/ckeditor5-alignment/16

Piotrek Koszuliński 7 年之前
父节点
当前提交
2fbb49903d

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

@@ -420,7 +420,7 @@ export function cleanList( evt, data, conversionApi ) {
 
 		for ( const child of children ) {
 			if ( !child.is( 'li' ) ) {
-				child.remove();
+				child._remove();
 			}
 		}
 	}
@@ -447,18 +447,18 @@ export function cleanListItem( evt, data, conversionApi ) {
 
 		for ( const child of children ) {
 			if ( foundList && !child.is( 'ul' ) && !child.is( 'ol' ) ) {
-				child.remove();
+				child._remove();
 			}
 
 			if ( child.is( 'text' ) ) {
 				// If this is the first node and it's a text node, left-trim it.
 				if ( firstNode ) {
-					child.data = child.data.replace( /^\s+/, '' );
+					conversionApi.writer.setTextData( child.data.replace( /^\s+/, '' ), child );
 				}
 
 				// If this is the last text node before <ul> or <ol>, right-trim it.
 				if ( !child.nextSibling || ( child.nextSibling.is( 'ul' ) || child.nextSibling.is( 'ol' ) ) ) {
-					child.data = child.data.replace( /\s+$/, '' );
+					conversionApi.writer.setTextData( child.data.replace( /\s+$/, '' ), child );
 				}
 			} else if ( child.is( 'ul' ) || child.is( 'ol' ) ) {
 				// If this is a <ul> or <ol>, do not process it, just mark that we already visited list element.
@@ -779,7 +779,7 @@ export function modelIndentPasteFixer( evt, [ content, selection ] ) {
 			if ( indentChange > 0 ) {
 				// Adjust indent of all "first" list items in inserted data.
 				while ( item && item.is( 'listItem' ) ) {
-					item.setAttribute( 'indent', item.getAttribute( 'indent' ) + indentChange );
+					item._setAttribute( 'indent', item.getAttribute( 'indent' ) + indentChange );
 
 					item = item.nextSibling;
 				}
@@ -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;
 			} );