Procházet zdrojové kódy

Remove Position, Range, Selection imports from engine/model.

Maciej Gołaszewski před 7 roky
rodič
revize
e0fdaf5354

+ 4 - 7
packages/ckeditor5-link/src/findlinkrange.js

@@ -7,9 +7,6 @@
  * @module link/findlinkrange
  */
 
-import Range from '@ckeditor/ckeditor5-engine/src/model/range';
-import Position from '@ckeditor/ckeditor5-engine/src/model/position';
-
 /**
  * Returns a range containing the entire link in which the given `position` is placed.
  *
@@ -20,8 +17,8 @@ import Position from '@ckeditor/ckeditor5-engine/src/model/position';
  * @param {String} value The `linkHref` attribute value.
  * @returns {module:engine/model/range~Range} The link range.
  */
-export default function findLinkRange( position, value ) {
-	return new Range( _findBound( position, value, true ), _findBound( position, value, false ) );
+export default function findLinkRange( position, value, model ) {
+	return model.createRange( _findBound( position, value, true, model ), _findBound( position, value, false, model ) );
 }
 
 // Walks forward or backward (depends on the `lookBack` flag), node by node, as long as they have the same `linkHref` attribute value
@@ -31,7 +28,7 @@ export default function findLinkRange( position, value ) {
 // @param {String} value The `linkHref` attribute value.
 // @param {Boolean} lookBack Whether the walk direction is forward (`false`) or backward (`true`).
 // @returns {module:engine/model/position~Position} The position just before the last matched node.
-function _findBound( position, value, lookBack ) {
+function _findBound( position, value, lookBack, model ) {
 	// Get node before or after position (depends on `lookBack` flag).
 	// When position is inside text node then start searching from text node.
 	let node = position.textNode || ( lookBack ? position.nodeBefore : position.nodeAfter );
@@ -43,5 +40,5 @@ function _findBound( position, value, lookBack ) {
 		node = lookBack ? node.previousSibling : node.nextSibling;
 	}
 
-	return lastNode ? Position.createAt( lastNode, lookBack ? 'before' : 'after' ) : position;
+	return lastNode ? model.createPositionAt( lastNode, lookBack ? 'before' : 'after' ) : position;
 }

+ 2 - 3
packages/ckeditor5-link/src/linkcommand.js

@@ -8,7 +8,6 @@
  */
 
 import Command from '@ckeditor/ckeditor5-core/src/command';
-import Range from '@ckeditor/ckeditor5-engine/src/model/range';
 import findLinkRange from './findlinkrange';
 import toMap from '@ckeditor/ckeditor5-utils/src/tomap';
 
@@ -65,7 +64,7 @@ export default class LinkCommand extends Command {
 				// When selection is inside text with `linkHref` attribute.
 				if ( selection.hasAttribute( 'linkHref' ) ) {
 					// Then update `linkHref` value.
-					const linkRange = findLinkRange( selection.getFirstPosition(), selection.getAttribute( 'linkHref' ) );
+					const linkRange = findLinkRange( selection.getFirstPosition(), selection.getAttribute( 'linkHref' ), model );
 
 					writer.setAttribute( 'linkHref', href, linkRange );
 
@@ -85,7 +84,7 @@ export default class LinkCommand extends Command {
 					writer.insert( node, position );
 
 					// Create new range wrapping created node.
-					writer.setSelection( Range.createOn( node ) );
+					writer.setSelection( writer.createRangeOn( node ) );
 				}
 			} else {
 				// If selection has non-collapsed ranges, we change attribute on nodes inside those ranges

+ 1 - 1
packages/ckeditor5-link/src/linkediting.js

@@ -96,7 +96,7 @@ export default class LinkEditing extends Plugin {
 			const selection = editor.model.document.selection;
 
 			if ( selection.hasAttribute( 'linkHref' ) ) {
-				const modelRange = findLinkRange( selection.getFirstPosition(), selection.getAttribute( 'linkHref' ) );
+				const modelRange = findLinkRange( selection.getFirstPosition(), selection.getAttribute( 'linkHref' ), editor.model );
 				const viewRange = editor.editing.mapper.toViewRange( modelRange );
 
 				// There might be multiple `a` elements in the `viewRange`, for example, when the `a` element is

+ 1 - 1
packages/ckeditor5-link/src/unlinkcommand.js

@@ -38,7 +38,7 @@ export default class UnlinkCommand extends Command {
 		model.change( writer => {
 			// Get ranges to unlink.
 			const rangesToUnlink = selection.isCollapsed ?
-				[ findLinkRange( selection.getFirstPosition(), selection.getAttribute( 'linkHref' ) ) ] : selection.getRanges();
+				[ findLinkRange( selection.getFirstPosition(), selection.getAttribute( 'linkHref' ), model ) ] : selection.getRanges();
 
 			// Remove `linkHref` attribute from specified ranges.
 			for ( const range of rangesToUnlink ) {

+ 34 - 31
packages/ckeditor5-link/tests/findlinkrange.js

@@ -6,7 +6,6 @@
 import findLinkRange from '../src/findlinkrange';
 import Model from '@ckeditor/ckeditor5-engine/src/model/model';
 import Range from '@ckeditor/ckeditor5-engine/src/model/range';
-import Position from '@ckeditor/ckeditor5-engine/src/model/position';
 import { setData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
 
 describe( 'findLinkRange', () => {
@@ -23,91 +22,91 @@ describe( 'findLinkRange', () => {
 	it( 'should find link range searching from the center of the link #1', () => {
 		setData( model, '<$text linkHref="url">foobar</$text>' );
 
-		const startPosition = new Position( root, [ 3 ] );
-		const result = findLinkRange( startPosition, 'url' );
+		const startPosition = model.createPositionAt( root, [ 3 ] );
+		const result = findLinkRange( startPosition, 'url', model );
 
 		expect( result ).to.instanceOf( Range );
-		expect( result.isEqual( Range.createFromParentsAndOffsets( root, 0, root, 6 ) ) ).to.true;
+		expect( result.isEqual( model.createRange( model.createPositionAt( root, 0 ), model.createPositionAt( root, 6 ) ) ) ).to.true;
 	} );
 
 	it( 'should find link range searching from the center of the link #2', () => {
 		setData( model, 'abc <$text linkHref="url">foobar</$text> abc' );
 
-		const startPosition = new Position( root, [ 7 ] );
-		const result = findLinkRange( startPosition, 'url' );
+		const startPosition = model.createPositionAt( root, [ 7 ] );
+		const result = findLinkRange( startPosition, 'url', model );
 
 		expect( result ).to.instanceOf( Range );
-		expect( result.isEqual( Range.createFromParentsAndOffsets( root, 4, root, 10 ) ) ).to.true;
+		expect( result.isEqual( model.createRange( model.createPositionAt( root, 4 ), model.createPositionAt( root, 10 ) ) ) ).to.true;
 	} );
 
 	it( 'should find link range searching from the beginning of the link #1', () => {
 		setData( model, '<$text linkHref="url">foobar</$text>' );
 
-		const startPosition = new Position( root, [ 0 ] );
-		const result = findLinkRange( startPosition, 'url' );
+		const startPosition = model.createPositionAt( root, [ 0 ] );
+		const result = findLinkRange( startPosition, 'url', model );
 
 		expect( result ).to.instanceOf( Range );
-		expect( result.isEqual( Range.createFromParentsAndOffsets( root, 0, root, 6 ) ) ).to.true;
+		expect( result.isEqual( model.createRange( model.createPositionAt( root, 0 ), model.createPositionAt( root, 6 ) ) ) ).to.true;
 	} );
 
 	it( 'should find link range searching from the beginning of the link #2', () => {
 		setData( model, 'abc <$text linkHref="url">foobar</$text> abc' );
 
-		const startPosition = new Position( root, [ 4 ] );
-		const result = findLinkRange( startPosition, 'url' );
+		const startPosition = model.createPositionAt( root, [ 4 ] );
+		const result = findLinkRange( startPosition, 'url', model );
 
 		expect( result ).to.instanceOf( Range );
-		expect( result.isEqual( Range.createFromParentsAndOffsets( root, 4, root, 10 ) ) ).to.true;
+		expect( result.isEqual( model.createRange( model.createPositionAt( root, 4 ), model.createPositionAt( root, 10 ) ) ) ).to.true;
 	} );
 
 	it( 'should find link range searching from the end of the link #1', () => {
 		setData( model, '<$text linkHref="url">foobar</$text>' );
 
-		const startPosition = new Position( root, [ 6 ] );
-		const result = findLinkRange( startPosition, 'url' );
+		const startPosition = model.createPositionAt( root, [ 6 ] );
+		const result = findLinkRange( startPosition, 'url', model );
 
 		expect( result ).to.instanceOf( Range );
-		expect( result.isEqual( Range.createFromParentsAndOffsets( root, 0, root, 6 ) ) ).to.true;
+		expect( result.isEqual( model.createRange( model.createPositionAt( root, 0 ), model.createPositionAt( root, 6 ) ) ) ).to.true;
 	} );
 
 	it( 'should find link range searching from the end of the link #2', () => {
 		setData( model, 'abc <$text linkHref="url">foobar</$text> abc' );
 
-		const startPosition = new Position( root, [ 10 ] );
-		const result = findLinkRange( startPosition, 'url' );
+		const startPosition = model.createPositionAt( root, [ 10 ] );
+		const result = findLinkRange( startPosition, 'url', model );
 
 		expect( result ).to.instanceOf( Range );
-		expect( result.isEqual( Range.createFromParentsAndOffsets( root, 4, root, 10 ) ) ).to.true;
+		expect( result.isEqual( model.createRange( model.createPositionAt( root, 4 ), model.createPositionAt( root, 10 ) ) ) ).to.true;
 	} );
 
 	it( 'should find link range when link stick to other link searching from the center of the link', () => {
 		setData( model, '<$text linkHref="other">abc</$text><$text linkHref="url">foobar</$text><$text linkHref="other">abc</$text>' );
 
-		const startPosition = new Position( root, [ 6 ] );
-		const result = findLinkRange( startPosition, 'url' );
+		const startPosition = model.createPositionAt( root, [ 6 ] );
+		const result = findLinkRange( startPosition, 'url', model );
 
 		expect( result ).to.instanceOf( Range );
-		expect( result.isEqual( Range.createFromParentsAndOffsets( root, 3, root, 9 ) ) ).to.true;
+		expect( result.isEqual( model.createRange( model.createPositionAt( root, 3 ), model.createPositionAt( root, 9 ) ) ) ).to.true;
 	} );
 
 	it( 'should find link range when link stick to other link searching from the beginning of the link', () => {
 		setData( model, '<$text linkHref="other">abc</$text><$text linkHref="url">foobar</$text><$text linkHref="other">abc</$text>' );
 
-		const startPosition = new Position( root, [ 3 ] );
-		const result = findLinkRange( startPosition, 'url' );
+		const startPosition = model.createPositionAt( root, [ 3 ] );
+		const result = findLinkRange( startPosition, 'url', model );
 
 		expect( result ).to.instanceOf( Range );
-		expect( result.isEqual( Range.createFromParentsAndOffsets( root, 3, root, 9 ) ) ).to.true;
+		expect( result.isEqual( model.createRange( model.createPositionAt( root, 3 ), model.createPositionAt( root, 9 ) ) ) ).to.true;
 	} );
 
 	it( 'should find link range when link stick to other link searching from the end of the link', () => {
 		setData( model, '<$text linkHref="other">abc</$text><$text linkHref="url">foobar</$text><$text linkHref="other">abc</$text>' );
 
-		const startPosition = new Position( root, [ 9 ] );
-		const result = findLinkRange( startPosition, 'url' );
+		const startPosition = model.createPositionAt( root, [ 9 ] );
+		const result = findLinkRange( startPosition, 'url', model );
 
 		expect( result ).to.instanceOf( Range );
-		expect( result.isEqual( Range.createFromParentsAndOffsets( root, 3, root, 9 ) ) ).to.true;
+		expect( result.isEqual( model.createRange( model.createPositionAt( root, 3 ), model.createPositionAt( root, 9 ) ) ) ).to.true;
 	} );
 
 	it( 'should find link range only inside current parent', () => {
@@ -118,10 +117,14 @@ describe( 'findLinkRange', () => {
 			'<p><$text linkHref="url">foobar</$text></p>'
 		);
 
-		const startPosition = new Position( root, [ 1, 3 ] );
-		const result = findLinkRange( startPosition, 'url' );
+		const startPosition = model.createPositionAt( root.getNodeByPath( [ 1 ] ), 3 );
+		const result = findLinkRange( startPosition, 'url', model );
 
 		expect( result ).to.instanceOf( Range );
-		expect( result.isEqual( new Range( new Position( root, [ 1, 0 ] ), new Position( root, [ 1, 6 ] ) ) ) ).to.true;
+		const expectedRange = new Range(
+			model.createPositionAt( root.getNodeByPath( [ 1 ] ), 0 ),
+			model.createPositionAt( root.getNodeByPath( [ 1 ] ), 6 )
+		);
+		expect( result.isEqual( expectedRange ) ).to.true;
 	} );
 } );

+ 9 - 10
packages/ckeditor5-link/tests/linkediting.js

@@ -10,7 +10,6 @@ import UnlinkCommand from '../src/unlinkcommand';
 import VirtualTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/virtualtesteditor';
 import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
 import Enter from '@ckeditor/ckeditor5-enter/src/enter';
-import ModelRange from '@ckeditor/ckeditor5-engine/src/model/range';
 import { getData as getModelData, setData as setModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
 import { getData as getViewData } from '@ckeditor/ckeditor5-engine/src/dev-utils/view';
 import { isLinkElement } from '../src/utils';
@@ -283,10 +282,10 @@ describe( 'LinkEditing', () => {
 				);
 
 				model.change( writer => {
-					writer.remove( ModelRange.createFromParentsAndOffsets(
-						model.document.getRoot().getChild( 0 ), 0,
-						model.document.getRoot().getChild( 0 ), 5 )
-					);
+					writer.remove( writer.createRange(
+						writer.createPositionAt( model.document.getRoot().getChild( 0 ), 0 ),
+						writer.createPositionAt( model.document.getRoot().getChild( 0 ), 5 )
+					) );
 				} );
 
 				expect( getViewData( view ) ).to.equal(
@@ -300,7 +299,7 @@ describe( 'LinkEditing', () => {
 				);
 
 				model.change( writer => {
-					writer.setAttribute( 'linkHref', 'new-url', new ModelRange(
+					writer.setAttribute( 'linkHref', 'new-url', writer.createRange(
 						model.document.selection.getFirstPosition().getShiftedBy( -1 ),
 						model.document.selection.getFirstPosition().getShiftedBy( 1 ) )
 					);
@@ -317,7 +316,7 @@ describe( 'LinkEditing', () => {
 				);
 
 				model.change( writer => {
-					writer.setSelection( new ModelRange(
+					writer.setSelection( writer.createRange(
 						model.document.selection.getFirstPosition().getShiftedBy( -1 ),
 						model.document.selection.getFirstPosition().getShiftedBy( 1 ) )
 					);
@@ -336,9 +335,9 @@ describe( 'LinkEditing', () => {
 				);
 
 				model.change( writer => {
-					const range = ModelRange.createFromParentsAndOffsets(
-						model.document.getRoot().getChild( 0 ), 0,
-						model.document.getRoot().getChild( 0 ), 5
+					const range = writer.createRange(
+						writer.createPositionAt( model.document.getRoot().getChild( 0 ), 0 ),
+						writer.createPositionAt( model.document.getRoot().getChild( 0 ), 5 )
 					);
 
 					writer.addMarker( 'fooMarker', { range, usingOperation: true } );

+ 3 - 4
packages/ckeditor5-link/tests/manual/tickets/113/1.js

@@ -8,7 +8,6 @@
 import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor';
 import ArticlePluginSet from '@ckeditor/ckeditor5-core/tests/_utils/articlepluginset';
 
-import Position from '@ckeditor/ckeditor5-engine/src/model/position';
 import Range from '@ckeditor/ckeditor5-engine/src/model/range';
 
 // Editor for the external insert.
@@ -54,7 +53,7 @@ function startExternalInsert( editor ) {
 
 	function type( path, text ) {
 		return new Promise( resolve => {
-			let position = new Position( model.document.getRoot(), path );
+			let position = model.createPositionFromPath( model.document.getRoot(), path );
 			let index = 0;
 
 			function typing() {
@@ -82,7 +81,7 @@ function startExternalInsert( editor ) {
 	function insertNewLine( path ) {
 		return wait( 200 ).then( () => {
 			model.enqueueChange( 'transparent', writer => {
-				writer.insertElement( 'paragraph', new Position( model.document.getRoot(), path ) );
+				writer.insertElement( 'paragraph', writer.createPositionFromPath( model.document.getRoot(), path ) );
 			} );
 
 			return Promise.resolve();
@@ -106,7 +105,7 @@ function startExternalDelete( editor ) {
 
 	wait( 3000 ).then( () => {
 		model.enqueueChange( 'transparent', writer => {
-			writer.remove( Range.createFromPositionAndShift( new Position( model.document.getRoot(), [ 1 ] ), 1 ) );
+			writer.remove( Range.createFromPositionAndShift( model.createPositionFromPath( model.document.getRoot(), [ 1 ] ), 1 ) );
 		} );
 	} );
 }