Преглед на файлове

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 години
родител
ревизия
df630b2b12

+ 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/imageediting.js

@@ -21,12 +21,10 @@ import { toImageWidget } from './utils';
 import { downcastElementToElement } from '@ckeditor/ckeditor5-engine/src/conversion/downcast-converters';
 import { upcastElementToElement, upcastAttributeToAttribute } from '@ckeditor/ckeditor5-engine/src/conversion/upcast-converters';
 
-import ViewPosition from '@ckeditor/ckeditor5-engine/src/view/position';
-
 /**
  * The image engine plugin.
  * It registers `<image>` as a block element in the document schema, and allows `alt`, `src` and `srcset` attributes.
- * It also egisters converters for editing and data pipelines.
+ * It also registers converters for editing and data pipelines.
  *
  * @extends module:core/plugin~Plugin
  */
@@ -120,7 +118,7 @@ export function createImageViewElement( writer ) {
 	const emptyElement = writer.createEmptyElement( 'img' );
 	const figure = writer.createContainerElement( 'figure', { class: 'image' } );
 
-	writer.insert( ViewPosition.createAt( figure, 0 ), emptyElement );
+	writer.insert( writer.createPositionAt( figure, 0 ), emptyElement );
 
 	return figure;
 }

+ 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/imagecaptionediting.js

@@ -8,7 +8,6 @@
  */
 
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
-import ViewPosition from '@ckeditor/ckeditor5-engine/src/view/position';
 import { upcastElementToElement } from '@ckeditor/ckeditor5-engine/src/conversion/upcast-converters';
 import { isImage } from '../image/utils';
 import {
@@ -240,7 +239,7 @@ function captionModelToView( elementCreator, hide = true ) {
 // @param {module:engine/view/containerelement~ContainerElement} viewImage
 // @param {Object} conversionApi
 function insertViewCaptionAndBind( viewCaption, modelCaption, viewImage, conversionApi ) {
-	const viewPosition = ViewPosition.createAt( viewImage, 'end' );
+	const viewPosition = conversionApi.writer.createPositionAt( viewImage, 'end' );
 
 	conversionApi.writer.insert( viewPosition, viewCaption );
 	conversionApi.mapper.bindElements( modelCaption, viewCaption );

+ 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();

+ 6 - 9
packages/ckeditor5-image/src/imageupload/imageuploadprogress.js

@@ -12,9 +12,6 @@
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import FileRepository from '@ckeditor/ckeditor5-upload/src/filerepository';
 import uploadingPlaceholder from '../../theme/icons/image_placeholder.svg';
-import UIElement from '@ckeditor/ckeditor5-engine/src/view/uielement';
-import ViewPosition from '@ckeditor/ckeditor5-engine/src/view/position';
-import ViewRange from '@ckeditor/ckeditor5-engine/src/view/range';
 import env from '@ckeditor/ckeditor5-utils/src/env';
 
 import '../../theme/imageuploadprogress.css';
@@ -159,7 +156,7 @@ function _showPlaceholder( placeholder, viewFigure, writer ) {
 	}
 
 	if ( !_getUIElement( viewFigure, placeholderSymbol ) ) {
-		writer.insert( ViewPosition.createAfter( viewImg ), _createPlaceholder( writer ) );
+		writer.insert( writer.createPositionAfter( viewImg ), _createPlaceholder( writer ) );
 	}
 }
 
@@ -184,7 +181,7 @@ function _hidePlaceholder( viewFigure, writer ) {
 // @param {module:engine/view/view~View} view
 function _showProgressBar( viewFigure, writer, loader, view ) {
 	const progressBar = _createProgressBar( writer );
-	writer.insert( ViewPosition.createAt( viewFigure, 'end' ), progressBar );
+	writer.insert( writer.createPositionAt( viewFigure, 'end' ), progressBar );
 
 	// Update progress bar width when uploadedPercent is changed.
 	loader.on( 'change:uploadedPercent', ( evt, name, value ) => {
@@ -208,12 +205,12 @@ function _hideProgressBar( viewFigure, writer ) {
 // @param {module:engine/view/downcastwriter~DowncastWriter} writer
 // @param {module:engine/view/view~View} view
 function _showCompleteIcon( viewFigure, writer, view ) {
-	const completeIcon = new UIElement( 'div', { class: 'ck-image-upload-complete-icon' } );
+	const completeIcon = writer.createUIElement( 'div', { class: 'ck-image-upload-complete-icon' } );
 
-	writer.insert( ViewPosition.createAt( viewFigure, 'end' ), completeIcon );
+	writer.insert( writer.createPositionAt( viewFigure, 'end' ), completeIcon );
 
 	setTimeout( () => {
-		view.change( writer => writer.remove( ViewRange.createOn( completeIcon ) ) );
+		view.change( writer => writer.remove( writer.createRangeOn( completeIcon ) ) );
 	}, 3000 );
 }
 
@@ -268,6 +265,6 @@ function _removeUIElement( viewFigure, writer, uniqueProperty ) {
 	const element = _getUIElement( viewFigure, uniqueProperty );
 
 	if ( element ) {
-		writer.remove( ViewRange.createOn( element ) );
+		writer.remove( writer.createRangeOn( element ) );
 	}
 }

+ 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' } );
 

+ 2 - 4
packages/ckeditor5-image/tests/image/imageloadobserver.js

@@ -8,8 +8,6 @@
 import ImageLoadObserver from '../../src/image/imageloadobserver';
 import Observer from '@ckeditor/ckeditor5-engine/src/view/observer/observer';
 import View from '@ckeditor/ckeditor5-engine/src/view/view';
-import Position from '@ckeditor/ckeditor5-engine/src/view/position';
-import Range from '@ckeditor/ckeditor5-engine/src/view/range';
 import createViewRoot from '@ckeditor/ckeditor5-engine/tests/view/_utils/createroot';
 import { setData } from '@ckeditor/ckeditor5-engine/src/dev-utils/view';
 
@@ -106,8 +104,8 @@ describe( 'ImageLoadObserver', () => {
 		view.change( writer => {
 			const text = writer.createText( 'foo', { b: true } );
 
-			writer.insert( Position.createAt( viewRoot.getChild( 0 ).getChild( 0 ), 0 ), text );
-			writer.wrap( Range.createOn( text ), writer.createAttributeElement( 'b' ) );
+			writer.insert( writer.createPositionAt( viewRoot.getChild( 0 ).getChild( 0 ), 0 ), text );
+			writer.wrap( writer.createRangeOn( text ), writer.createAttributeElement( 'b' ) );
 		} );
 
 		sinon.assert.calledWith( mapSpy, viewP );

+ 9 - 11
packages/ckeditor5-image/tests/image/utils.js

@@ -3,12 +3,9 @@
  * For licensing, see LICENSE.md.
  */
 
-import ViewElement from '@ckeditor/ckeditor5-engine/src/view/element';
-import ViewSelection from '@ckeditor/ckeditor5-engine/src/view/selection';
 import ViewDocumentFragment from '@ckeditor/ckeditor5-engine/src/view/documentfragment';
 import ViewDowncastWriter from '@ckeditor/ckeditor5-engine/src/view/downcastwriter';
 import ViewDocument from '@ckeditor/ckeditor5-engine/src/view/document';
-import ViewRange from '@ckeditor/ckeditor5-engine/src/view/range';
 import ModelElement from '@ckeditor/ckeditor5-engine/src/model/element';
 import { toImageWidget, isImageWidget, isImageWidgetSelected, isImage } from '../../src/image/utils';
 import { isWidget, getLabel } from '@ckeditor/ckeditor5-widget/src/utils';
@@ -18,8 +15,9 @@ describe( 'image widget utils', () => {
 
 	beforeEach( () => {
 		writer = new ViewDowncastWriter( new ViewDocument() );
-		image = new ViewElement( 'img' );
-		element = new ViewElement( 'figure', null, image );
+		image = writer.createContainerElement( 'img' );
+		element = writer.createContainerElement( 'figure' );
+		writer.insert( writer.createPositionAt( element, 0 ), image );
 		toImageWidget( element, writer, 'image widget' );
 	} );
 
@@ -51,7 +49,7 @@ describe( 'image widget utils', () => {
 		} );
 
 		it( 'should return false for non-widgetized elements', () => {
-			expect( isImageWidget( new ViewElement( 'p' ) ) ).to.be.false;
+			expect( isImageWidget( writer.createContainerElement( 'p' ) ) ).to.be.false;
 		} );
 	} );
 
@@ -62,28 +60,28 @@ describe( 'image widget utils', () => {
 			// We need to create a container for the element to be able to create a Range on this element.
 			frag = new ViewDocumentFragment( [ element ] );
 
-			const selection = new ViewSelection( element, 'on' );
+			const selection = writer.createSelection( element, 'on' );
 
 			expect( isImageWidgetSelected( selection ) ).to.be.true;
 		} );
 
 		it( 'should return false when non-widgetized elements is the only element in the selection', () => {
-			const notWidgetizedElement = new ViewElement( 'p' );
+			const notWidgetizedElement = writer.createContainerElement( 'p' );
 
 			// We need to create a container for the element to be able to create a Range on this element.
 			frag = new ViewDocumentFragment( [ notWidgetizedElement ] );
 
-			const selection = new ViewSelection( notWidgetizedElement, 'on' );
+			const selection = writer.createSelection( notWidgetizedElement, 'on' );
 
 			expect( isImageWidgetSelected( selection ) ).to.be.false;
 		} );
 
 		it( 'should return false when widget element is not the only element in the selection', () => {
-			const notWidgetizedElement = new ViewElement( 'p' );
+			const notWidgetizedElement = writer.createContainerElement( 'p' );
 
 			frag = new ViewDocumentFragment( [ element, notWidgetizedElement ] );
 
-			const selection = new ViewSelection( ViewRange.createIn( frag ) );
+			const selection = writer.createSelection( writer.createRangeIn( frag ) );
 
 			expect( isImageWidgetSelected( selection ) ).to.be.false;
 		} );

+ 15 - 18
packages/ckeditor5-image/tests/imagecaption/imagecaptionediting.js

@@ -10,11 +10,6 @@ import ImageEditing from '../../src/image/imageediting';
 import UndoEditing from '@ckeditor/ckeditor5-undo/src/undoediting';
 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';
 
@@ -155,9 +150,9 @@ describe( 'ImageCaptionEditing', () => {
 						conversionApi.consumable.consume( data.item, 'insert' );
 
 						const imageFigure = conversionApi.mapper.toViewElement( data.range.start.parent );
-						const viewElement = new ViewAttributeElement( 'span' );
+						const viewElement = conversionApi.writer.createAttributeElement( 'span' );
 
-						const viewPosition = ViewPosition.createAt( imageFigure, 'end' );
+						const viewPosition = conversionApi.writer.createPositionAt( imageFigure, 'end' );
 						conversionApi.mapper.bindElements( data.item, viewElement );
 						conversionApi.writer.insert( viewPosition, viewElement );
 					},
@@ -200,7 +195,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 +216,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 +253,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 +279,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 +404,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 +421,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 +448,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 ) )
 				);
 			} );
 

+ 9 - 11
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( () => {
@@ -289,7 +287,7 @@ describe( 'ImageUploadEditing', () => {
 
 		expect( getViewData( view ) ).to.equal(
 			'[<figure class="ck-widget image" contenteditable="false">' +
-				'<img></img>' +
+			'<img></img>' +
 			'</figure>]' );
 	} );
 
@@ -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;
@@ -527,7 +525,7 @@ describe( 'ImageUploadEditing', () => {
 			model.document.once( 'change', () => {
 				expect( getViewData( view ) ).to.equal(
 					'[<figure class="ck-widget image" contenteditable="false">' +
-						'<img sizes="100vw" src="image.png" srcset="image-500.png 500w, image-800.png 800w" width="800"></img>' +
+					'<img sizes="100vw" src="image.png" srcset="image-500.png 500w, image-800.png 800w" width="800"></img>' +
 					'</figure>]<p>foo bar</p>'
 				);
 				expect( loader.status ).to.equal( 'idle' );

+ 4 - 6
packages/ckeditor5-image/tests/manual/tickets/106/1.js

@@ -8,9 +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';
-
 const config = {
 	plugins: [ ArticlePluginSet ],
 	toolbar: [ 'undo', 'redo', 'link' ],
@@ -54,7 +51,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 +79,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 +103,8 @@ function startExternalDelete( editor ) {
 
 	function removeSecondBlock() {
 		model.enqueueChange( 'transparent', writer => {
-			writer.remove( Range.createFromPositionAndShift( new Position( model.document.getRoot(), [ 1 ] ), 1 ) );
+			const start = writer.createPositionFromPath( model.document.getRoot(), [ 1 ] );
+			writer.remove( writer.createRange( start, start.getShiftedBy( 1 ) ) );
 		} );
 	}