瀏覽代碼

Merge branch t/ckeditor5-engine/1555

Internal: Use built-in factories of range, position and selection classes. Avoid importing things from the engine. See ckeditor/ckeditor5-engine#1555.
Piotrek Koszuliński 7 年之前
父節點
當前提交
eba5e1d019

+ 12 - 10
packages/ckeditor5-paste-from-office/src/filters/list.js

@@ -9,7 +9,6 @@
 
 import Element from '@ckeditor/ckeditor5-engine/src/view/element';
 import Matcher from '@ckeditor/ckeditor5-engine/src/view/matcher';
-import Range from '@ckeditor/ckeditor5-engine/src/view/range';
 import UpcastWriter from '@ckeditor/ckeditor5-engine/src/view/upcastwriter';
 
 /**
@@ -22,13 +21,14 @@ import UpcastWriter from '@ckeditor/ckeditor5-engine/src/view/upcastwriter';
  *
  * @param {module:engine/view/documentfragment~DocumentFragment} documentFragment The view structure which to transform.
  * @param {String} stylesString Styles from which list-like elements styling will be extracted.
+ * @param {module:engine/view/view~View} view
  */
-export function transformListItemLikeElementsIntoLists( documentFragment, stylesString ) {
+export function transformListItemLikeElementsIntoLists( documentFragment, stylesString, view ) {
 	if ( !documentFragment.childCount ) {
 		return;
 	}
 
-	const itemLikeElements = findAllItemLikeElements( documentFragment );
+	const itemLikeElements = findAllItemLikeElements( documentFragment, view );
 
 	if ( !itemLikeElements.length ) {
 		return;
@@ -45,7 +45,7 @@ export function transformListItemLikeElementsIntoLists( documentFragment, styles
 			currentList = insertNewEmptyList( listStyle, itemLikeElement.element, writer );
 		}
 
-		const listItem = transformElementIntoListItem( itemLikeElement.element, writer );
+		const listItem = transformElementIntoListItem( itemLikeElement.element, writer, view );
 
 		writer.appendChild( listItem, currentList );
 	} );
@@ -55,14 +55,15 @@ export function transformListItemLikeElementsIntoLists( documentFragment, styles
 //
 // @param {module:engine/view/documentfragment~DocumentFragment} documentFragment Document fragment
 // in which to look for list-like nodes.
+// @param {module:engine/view/view~View} view
 // @returns {Array.<Object>} Array of found list-like items. Each item is an object containing:
 //
 //		* {module:engine/src/view/element~Element} element List-like element.
 //		* {Number} id List item id parsed from `mso-list` style (see `getListItemData()` function).
 //		* {Number} order List item creation order parsed from `mso-list` style (see `getListItemData()` function).
 //		* {Number} indent List item indentation level parsed from `mso-list` style (see `getListItemData()` function).
-function findAllItemLikeElements( documentFragment ) {
-	const range = Range.createIn( documentFragment );
+function findAllItemLikeElements( documentFragment, view ) {
+	const range = view.createRangeIn( documentFragment );
 
 	// Matcher for finding list-like elements.
 	const itemLikeElementsMatcher = new Matcher( {
@@ -155,8 +156,8 @@ function insertNewEmptyList( listStyle, element, writer ) {
 // @param {module:engine/view/upcastwriter~UpcastWriter} writer
 // @returns {module:engine/view/element~Element} New element to which the given one was transformed. It is
 // inserted in place of the old element (the reference to the old element is lost due to renaming).
-function transformElementIntoListItem( element, writer ) {
-	removeBulletElement( element, writer );
+function transformElementIntoListItem( element, writer, view ) {
+	removeBulletElement( element, writer, view );
 
 	return writer.rename( 'li', element );
 }
@@ -193,7 +194,8 @@ function getListItemData( element ) {
 //
 // @param {module:engine/view/element~Element} element
 // @param {module:engine/view/upcastwriter~UpcastWriter} writer
-function removeBulletElement( element, writer ) {
+// @param {module:engine/view/view~View} view
+function removeBulletElement( element, writer, view ) {
 	// Matcher for finding `span` elements holding lists numbering/bullets.
 	const bulletMatcher = new Matcher( {
 		name: 'span',
@@ -202,7 +204,7 @@ function removeBulletElement( element, writer ) {
 		}
 	} );
 
-	const range = Range.createIn( element );
+	const range = view.createRangeIn( element );
 
 	for ( const value of range ) {
 		if ( value.type === 'elementStart' && bulletMatcher.match( value.item ) ) {

+ 1 - 1
packages/ckeditor5-paste-from-office/src/pastefromoffice.js

@@ -57,7 +57,7 @@ export default class PasteFromOffice extends Plugin {
 	 */
 	_normalizeWordInput( input ) {
 		const { body, stylesString } = parseHtml( input );
-		transformListItemLikeElementsIntoLists( body, stylesString );
+		transformListItemLikeElementsIntoLists( body, stylesString, this.editor.editing.view );
 
 		return body;
 	}

+ 6 - 5
packages/ckeditor5-paste-from-office/tests/filters/list.js

@@ -5,6 +5,7 @@
 
 import HtmlDataProcessor from '@ckeditor/ckeditor5-engine/src/dataprocessor/htmldataprocessor';
 import { stringify } from '@ckeditor/ckeditor5-engine/src/dev-utils/view';
+import View from '@ckeditor/ckeditor5-engine/src/view/view';
 
 import { transformListItemLikeElementsIntoLists } from '../../src/filters/list';
 
@@ -16,7 +17,7 @@ describe( 'Filters – list', () => {
 			const html = '<p style="mso-list:l0 level1 lfo0"><span style="mso-list:Ignore">1.</span>Item 1</p>';
 			const view = htmlDataProcessor.toView( html );
 
-			transformListItemLikeElementsIntoLists( view, '' );
+			transformListItemLikeElementsIntoLists( view, '', new View() );
 
 			expect( view.childCount ).to.equal( 1 );
 			expect( view.getChild( 0 ).name ).to.equal( 'ol' );
@@ -27,7 +28,7 @@ describe( 'Filters – list', () => {
 			const html = '<p style="mso-list:l0 level1 lfo0"><span style="mso-list:Ignore">1.</span>Item 1</p>';
 			const view = htmlDataProcessor.toView( html );
 
-			transformListItemLikeElementsIntoLists( view, '@list l0:level1 { mso-level-number-format: bullet; }' );
+			transformListItemLikeElementsIntoLists( view, '@list l0:level1 { mso-level-number-format: bullet; }', new View() );
 
 			expect( view.childCount ).to.equal( 1 );
 			expect( view.getChild( 0 ).name ).to.equal( 'ul' );
@@ -38,7 +39,7 @@ describe( 'Filters – list', () => {
 			const html = '<h1>H1</h1><p>Foo Bar</p>';
 			const view = htmlDataProcessor.toView( html );
 
-			transformListItemLikeElementsIntoLists( view, '' );
+			transformListItemLikeElementsIntoLists( view, '', new View() );
 
 			expect( view.childCount ).to.equal( 2 );
 			expect( stringify( view ) ).to.equal( html );
@@ -48,7 +49,7 @@ describe( 'Filters – list', () => {
 			const html = '<p style="mso-list:"><span style="mso-list:Ignore">1.</span>Item 1</p>';
 			const view = htmlDataProcessor.toView( html );
 
-			transformListItemLikeElementsIntoLists( view, '' );
+			transformListItemLikeElementsIntoLists( view, '', new View() );
 
 			expect( view.childCount ).to.equal( 1 );
 			expect( view.getChild( 0 ).name ).to.equal( 'ol' );
@@ -58,7 +59,7 @@ describe( 'Filters – list', () => {
 		it( 'handles empty body correctly', () => {
 			const view = htmlDataProcessor.toView( '' );
 
-			transformListItemLikeElementsIntoLists( view, '' );
+			transformListItemLikeElementsIntoLists( view, '', new View() );
 
 			expect( view.childCount ).to.equal( 0 );
 			expect( stringify( view ) ).to.equal( '' );