瀏覽代碼

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

Maciej Gołaszewski 7 年之前
父節點
當前提交
9e869a9bef

+ 2 - 2
packages/ckeditor5-image/package.json

@@ -12,10 +12,10 @@
   "dependencies": {
     "@ckeditor/ckeditor5-core": "^11.0.1",
     "@ckeditor/ckeditor5-engine": "^11.0.0",
-    "@ckeditor/ckeditor5-ui": "^11.1.0",
-    "@ckeditor/ckeditor5-utils": "^11.0.0",
     "@ckeditor/ckeditor5-theme-lark": "^11.1.0",
+    "@ckeditor/ckeditor5-ui": "^11.1.0",
     "@ckeditor/ckeditor5-upload": "^10.0.3",
+    "@ckeditor/ckeditor5-utils": "^11.0.0",
     "@ckeditor/ckeditor5-widget": "^10.3.0"
   },
   "devDependencies": {

+ 1 - 2
packages/ckeditor5-image/src/image/converters.js

@@ -7,7 +7,6 @@
  * @module image/image/converters
  */
 
-import ModelPosition from '@ckeditor/ckeditor5-engine/src/model/position';
 import first from '@ckeditor/ckeditor5-utils/src/first';
 
 /**
@@ -55,7 +54,7 @@ export function viewFigureToModel() {
 		}
 
 		// Convert rest of the figure element's children as an image children.
-		conversionApi.convertChildren( data.viewItem, ModelPosition.createAt( modelImage, 0 ) );
+		conversionApi.convertChildren( data.viewItem, conversionApi.writer.createPositionAt( modelImage, 0 ) );
 
 		// Set image range as conversion result.
 		data.modelRange = conversionResult.modelRange;

+ 2 - 4
packages/ckeditor5-image/src/image/utils.js

@@ -8,7 +8,6 @@
  */
 
 import { toWidget, isWidget } from '@ckeditor/ckeditor5-widget/src/utils';
-import ModelElement from '@ckeditor/ckeditor5-engine/src/model/element';
 
 const imageSymbol = Symbol( 'isImage' );
 
@@ -58,12 +57,11 @@ export function isImageWidgetSelected( selection ) {
 }
 
 /**
- * Checks if the provided model element is an instance of {@link module:engine/model/element~Element Element} and its name
- * is `image`.
+ * Checks if the provided model element is an `image`.
  *
  * @param {module:engine/model/element~Element} modelElement
  * @returns {Boolean}
  */
 export function isImage( modelElement ) {
-	return modelElement instanceof ModelElement && modelElement.name == 'image';
+	return !!modelElement && modelElement.is( 'image' );
 }

+ 1 - 2
packages/ckeditor5-image/src/imagecaption/utils.js

@@ -7,7 +7,6 @@
  * @module image/imagecaption/utils
  */
 
-import ModelElement from '@ckeditor/ckeditor5-engine/src/model/element';
 import { attachPlaceholder } from '@ckeditor/ckeditor5-engine/src/view/placeholder';
 import { toWidgetEditable } from '@ckeditor/ckeditor5-widget/src/utils';
 
@@ -48,7 +47,7 @@ export function isCaption( viewElement ) {
  */
 export function getCaptionFromImage( imageModelElement ) {
 	for ( const node of imageModelElement.getChildren() ) {
-		if ( node instanceof ModelElement && node.name == 'caption' ) {
+		if ( !!node && node.is( 'caption' ) ) {
 			return node;
 		}
 	}

+ 9 - 8
packages/ckeditor5-image/src/imageupload/imageuploadcommand.js

@@ -25,7 +25,7 @@ export default class ImageUploadCommand extends Command {
 		const selection = model.document.selection;
 		const schema = model.schema;
 
-		this.isEnabled = isImageAllowedInParent( selection, schema ) && checkSelectionWithObject( selection, schema );
+		this.isEnabled = isImageAllowedInParent( selection, schema, model ) && checkSelectionWithObject( selection, schema );
 	}
 
 	/**
@@ -54,7 +54,8 @@ export default class ImageUploadCommand extends Command {
 // @param {module:core/editor/editor~Editor} editor
 // @param {File} file
 function uploadImage( writer, editor, file ) {
-	const doc = editor.model.document;
+	const model = editor.model;
+	const doc = model.document;
 	const fileRepository = editor.plugins.get( FileRepository );
 
 	const loader = fileRepository.createLoader( file );
@@ -66,9 +67,9 @@ function uploadImage( writer, editor, file ) {
 
 	const imageElement = writer.createElement( 'image', { uploadId: loader.id } );
 
-	const insertAtSelection = findOptimalInsertionPosition( doc.selection );
+	const insertAtSelection = findOptimalInsertionPosition( doc.selection, model );
 
-	editor.model.insertContent( imageElement, insertAtSelection );
+	model.insertContent( imageElement, insertAtSelection );
 
 	// Inserting an image might've failed due to schema regulations.
 	if ( imageElement.parent ) {
@@ -77,8 +78,8 @@ function uploadImage( writer, editor, file ) {
 }
 
 // Checks if image is allowed by schema in optimal insertion parent.
-function isImageAllowedInParent( selection, schema ) {
-	const parent = getInsertImageParent( selection );
+function isImageAllowedInParent( selection, schema, model ) {
+	const parent = getInsertImageParent( selection, model );
 
 	return schema.checkChild( parent, 'image' );
 }
@@ -96,8 +97,8 @@ function checkSelectionWithObject( selection, schema ) {
 }
 
 // Returns a node that will be used to insert image with `model.insertContent` to check if image can be placed there.
-function getInsertImageParent( selection ) {
-	const insertAt = findOptimalInsertionPosition( selection );
+function getInsertImageParent( selection, model ) {
+	const insertAt = findOptimalInsertionPosition( selection, model );
 
 	let parent = insertAt.parent;
 

+ 4 - 6
packages/ckeditor5-image/src/imageupload/imageuploadediting.js

@@ -9,9 +9,9 @@
 
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import FileRepository from '@ckeditor/ckeditor5-upload/src/filerepository';
-import ImageUploadCommand from '../../src/imageupload/imageuploadcommand';
 import Notification from '@ckeditor/ckeditor5-ui/src/notification/notification';
-import ModelSelection from '@ckeditor/ckeditor5-engine/src/model/selection';
+
+import ImageUploadCommand from '../../src/imageupload/imageuploadcommand';
 import { isImageType } from '../../src/imageupload/utils';
 
 /**
@@ -57,13 +57,11 @@ export default class ImageUploadEditing extends Plugin {
 
 			const images = Array.from( data.dataTransfer.files ).filter( isImageType );
 
-			const targetModelSelection = new ModelSelection(
-				data.targetRanges.map( viewRange => editor.editing.mapper.toModelRange( viewRange ) )
-			);
+			const ranges = data.targetRanges.map( viewRange => editor.editing.mapper.toModelRange( viewRange ) );
 
 			editor.model.change( writer => {
 				// Set selection to paste target.
-				writer.setSelection( targetModelSelection );
+				writer.setSelection( ranges );
 
 				if ( images.length ) {
 					evt.stop();

+ 1 - 2
packages/ckeditor5-image/tests/image.js

@@ -10,7 +10,6 @@ import Widget from '@ckeditor/ckeditor5-widget/src/widget';
 import ImageTextAlternative from '../src/imagetextalternative';
 import { setData as setModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
 import { getData as getViewData } from '@ckeditor/ckeditor5-engine/src/dev-utils/view';
-import ModelRange from '@ckeditor/ckeditor5-engine/src/model/range';
 import global from '@ckeditor/ckeditor5-utils/src/dom/global';
 import env from '@ckeditor/ckeditor5-utils/src/env';
 import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
@@ -106,7 +105,7 @@ describe( 'Image', () => {
 
 			model.change( writer => {
 				const secondImage = document.getRoot().getChild( 1 );
-				writer.setSelection( ModelRange.createOn( secondImage ) );
+				writer.setSelection( writer.createRangeOn( secondImage ) );
 			} );
 
 			expect( getViewData( view ) ).to.equal(

+ 1 - 2
packages/ckeditor5-image/tests/image/converters.js

@@ -14,7 +14,6 @@ import VirtualTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/virtualtest
 import { downcastElementToElement } from '@ckeditor/ckeditor5-engine/src/conversion/downcast-converters';
 import { upcastElementToElement } from '@ckeditor/ckeditor5-engine/src/conversion/upcast-converters';
 
-import ModelRange from '@ckeditor/ckeditor5-engine/src/model/range';
 import { getData as getViewData } from '@ckeditor/ckeditor5-engine/src/dev-utils/view';
 import { setData as setModelData, getData as getModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
 import env from '@ckeditor/ckeditor5-utils/src/env';
@@ -178,7 +177,7 @@ describe( 'Image converters', () => {
 					}
 				} );
 				conversionApi.writer.insert( element, data.modelCursor );
-				data.modelRange = ModelRange.createOn( element );
+				data.modelRange = conversionApi.writer.createRangeOn( element );
 				data.modelCursor = data.modelRange.end;
 			}, { priority: 'high' } );
 

+ 13 - 13
packages/ckeditor5-image/tests/imagecaption/imagecaptionediting.js

@@ -12,8 +12,6 @@ import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
 
 import ViewAttributeElement from '@ckeditor/ckeditor5-engine/src/view/attributeelement';
 import ViewPosition from '@ckeditor/ckeditor5-engine/src/view/position';
-import ModelElement from '@ckeditor/ckeditor5-engine/src/model/element';
-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';
@@ -200,7 +198,7 @@ describe( 'ImageCaptionEditing', () => {
 				const caption = image.getChild( 0 );
 
 				model.change( writer => {
-					writer.remove( ModelRange.createIn( caption ) );
+					writer.remove( writer.createRangeIn( caption ) );
 				} );
 
 				expect( getViewData( view ) ).to.equal(
@@ -221,7 +219,7 @@ describe( 'ImageCaptionEditing', () => {
 				const caption = image.getChild( 0 );
 
 				model.change( writer => {
-					writer.remove( ModelRange.createFromParentsAndOffsets( caption, 0, caption, 8 ) );
+					writer.remove( writer.createRange( writer.createPositionAt( caption, 0 ), writer.createPositionAt( caption, 8 ) ) );
 				} );
 
 				expect( getViewData( view ) ).to.equal(
@@ -258,10 +256,12 @@ describe( 'ImageCaptionEditing', () => {
 		} );
 
 		it( 'should not add caption element if image already have it', () => {
-			const caption = new ModelElement( 'caption', null, 'foo bar' );
-			const image = new ModelElement( 'image', { src: '', alt: '' }, caption );
-
 			model.change( writer => {
+				const caption = writer.createElement( 'caption' );
+				const image = writer.createElement( 'image', { src: '', alt: '' } );
+
+				writer.insertText( 'foo bar', caption );
+				writer.insert( caption, image );
 				writer.insert( image, doc.getRoot() );
 			} );
 
@@ -282,10 +282,10 @@ describe( 'ImageCaptionEditing', () => {
 		} );
 
 		it( 'should not add caption element twice', () => {
-			const image = new ModelElement( 'image', { src: '', alt: '' } );
-			const caption = new ModelElement( 'caption' );
-
 			model.change( writer => {
+				const image = writer.createElement( 'image', { src: '', alt: '' } );
+				const caption = writer.createElement( 'caption' );
+
 				// Since we are adding an empty image, this should trigger caption fixer.
 				writer.insert( image, doc.getRoot() );
 
@@ -407,7 +407,7 @@ describe( 'ImageCaptionEditing', () => {
 
 			model.change( writer => {
 				writer.remove( doc.selection.getFirstRange() );
-				writer.setSelection( ModelRange.createOn( image ) );
+				writer.setSelection( writer.createRangeOn( image ) );
 			} );
 
 			expect( getViewData( view ) ).to.equal(
@@ -424,7 +424,7 @@ describe( 'ImageCaptionEditing', () => {
 			const image = doc.getRoot().getChild( 1 );
 
 			model.change( writer => {
-				writer.setSelection( ModelRange.createOn( image ) );
+				writer.setSelection( writer.createRangeOn( image ) );
 			} );
 
 			expect( getViewData( view ) ).to.equal(
@@ -451,7 +451,7 @@ describe( 'ImageCaptionEditing', () => {
 
 				// Remove text and selection from caption.
 				model.change( writer => {
-					writer.remove( ModelRange.createIn( modelCaption ) );
+					writer.remove( writer.createRangeIn( modelCaption ) );
 					writer.setSelection( null );
 				} );
 

+ 2 - 3
packages/ckeditor5-image/tests/imagetoolbar.js

@@ -12,7 +12,6 @@ import global from '@ckeditor/ckeditor5-utils/src/dom/global';
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import ButtonView from '@ckeditor/ckeditor5-ui/src/button/buttonview';
 import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
-import Range from '@ckeditor/ckeditor5-engine/src/model/range';
 import View from '@ckeditor/ckeditor5-ui/src/view';
 import { setData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
 import env from '@ckeditor/ckeditor5-utils/src/env';
@@ -135,7 +134,7 @@ describe( 'ImageToolbar', () => {
 			model.change( writer => {
 				// Select the [<image></image>]
 				writer.setSelection(
-					Range.createOn( doc.getRoot().getChild( 1 ) )
+					writer.createRangeOn( doc.getRoot().getChild( 1 ) )
 				);
 			} );
 
@@ -177,7 +176,7 @@ describe( 'ImageToolbar', () => {
 			model.change( writer => {
 				// Select the <paragraph>[...]</paragraph>
 				writer.setSelection(
-					Range.createIn( doc.getRoot().getChild( 0 ) )
+					writer.createRangeIn( doc.getRoot().getChild( 0 ) )
 				);
 			} );
 

+ 7 - 9
packages/ckeditor5-image/tests/imageupload/imageuploadediting.js

@@ -21,8 +21,6 @@ import { UploadAdapterMock, createNativeFileMock, NativeFileReaderMock } from '@
 
 import { setData as setModelData, getData as getModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
 import { getData as getViewData } from '@ckeditor/ckeditor5-engine/src/dev-utils/view';
-import Range from '@ckeditor/ckeditor5-engine/src/model/range';
-import Position from '@ckeditor/ckeditor5-engine/src/model/position';
 
 import log from '@ckeditor/ckeditor5-utils/src/log';
 import env from '@ckeditor/ckeditor5-utils/src/env';
@@ -88,7 +86,7 @@ describe( 'ImageUploadEditing', () => {
 		const dataTransfer = new DataTransfer( { files: [ fileMock ], types: [ 'Files' ] } );
 		setModelData( model, '<paragraph>[]foo</paragraph>' );
 
-		const targetRange = Range.createFromParentsAndOffsets( doc.getRoot(), 1, doc.getRoot(), 1 );
+		const targetRange = model.createRange( model.createPositionAt( doc.getRoot() ), 1, model.createPositionAt( doc.getRoot(), 1 ) );
 		const targetViewRange = editor.editing.mapper.toViewRange( targetRange );
 
 		viewDocument.fire( 'clipboardInput', { dataTransfer, targetRanges: [ targetViewRange ] } );
@@ -105,7 +103,7 @@ describe( 'ImageUploadEditing', () => {
 		setModelData( model, '<paragraph>[]foo</paragraph>' );
 
 		const paragraph = doc.getRoot().getChild( 0 );
-		const targetRange = Range.createFromParentsAndOffsets( paragraph, 1, paragraph, 1 ); // f[]oo
+		const targetRange = model.createRange( model.createPositionAt( paragraph, 1 ), model.createPositionAt( paragraph, 1 ) ); // f[]oo
 		const targetViewRange = editor.editing.mapper.toViewRange( targetRange );
 
 		viewDocument.fire( 'clipboardInput', { dataTransfer, targetRanges: [ targetViewRange ] } );
@@ -121,7 +119,7 @@ describe( 'ImageUploadEditing', () => {
 		const dataTransfer = new DataTransfer( { files, types: [ 'Files' ] } );
 		setModelData( model, '<paragraph>[]foo</paragraph>' );
 
-		const targetRange = Range.createFromParentsAndOffsets( doc.getRoot(), 1, doc.getRoot(), 1 );
+		const targetRange = model.createRange( model.createPositionAt( doc.getRoot() ), 1, model.createPositionAt( doc.getRoot(), 1 ) );
 		const targetViewRange = editor.editing.mapper.toViewRange( targetRange );
 
 		viewDocument.fire( 'clipboardInput', { dataTransfer, targetRanges: [ targetViewRange ] } );
@@ -146,7 +144,7 @@ describe( 'ImageUploadEditing', () => {
 
 		expect( command.isEnabled ).to.be.false;
 
-		const targetRange = Range.createFromParentsAndOffsets( doc.getRoot(), 0, doc.getRoot(), 0 );
+		const targetRange = model.createRange( model.createPositionAt( doc.getRoot() ), 0, model.createPositionAt( doc.getRoot(), 0 ) );
 		const targetViewRange = editor.editing.mapper.toViewRange( targetRange );
 
 		viewDocument.fire( 'clipboardInput', { dataTransfer, targetRanges: [ targetViewRange ] } );
@@ -208,7 +206,7 @@ describe( 'ImageUploadEditing', () => {
 		} );
 		setModelData( model, '<paragraph>[]foo</paragraph>' );
 
-		const targetRange = Range.createFromParentsAndOffsets( doc.getRoot(), 1, doc.getRoot(), 1 );
+		const targetRange = model.createRange( model.createPositionAt( doc.getRoot() ), 1, model.createPositionAt( doc.getRoot(), 1 ) );
 		const targetViewRange = editor.editing.mapper.toViewRange( targetRange );
 
 		viewDocument.fire( 'clipboardInput', { dataTransfer, targetRanges: [ targetViewRange ] } );
@@ -247,7 +245,7 @@ describe( 'ImageUploadEditing', () => {
 
 		fileRepository.createUploadAdapter = undefined;
 
-		const targetRange = Range.createFromParentsAndOffsets( doc.getRoot(), 1, doc.getRoot(), 1 );
+		const targetRange = model.createRange( model.createPositionAt( doc.getRoot() ), 1, model.createPositionAt( doc.getRoot(), 1 ) );
 		const targetViewRange = editor.editing.mapper.toViewRange( targetRange );
 
 		expect( () => {
@@ -468,7 +466,7 @@ describe( 'ImageUploadEditing', () => {
 		const image = doc.getRoot().getChild( 0 );
 
 		model.change( writer => {
-			writer.move( Range.createOn( image ), Position.createAt( doc.getRoot(), 2 ) );
+			writer.move( writer.createRangeOn( image ), writer.createPositionAt( doc.getRoot(), 2 ) );
 		} );
 
 		expect( abortSpy.called ).to.be.false;

+ 3 - 5
packages/ckeditor5-image/tests/manual/tickets/106/1.js

@@ -7,8 +7,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';
 
 const config = {
@@ -54,7 +52,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 +80,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 +104,7 @@ function startExternalDelete( editor ) {
 
 	function removeSecondBlock() {
 		model.enqueueChange( 'transparent', writer => {
-			writer.remove( Range.createFromPositionAndShift( new Position( model.document.getRoot(), [ 1 ] ), 1 ) );
+			writer.remove( Range.createFromPositionAndShift( writer.createPositionFromPath( model.document.getRoot(), [ 1 ] ), 1 ) );
 		} );
 	}