8
0
Просмотр исходного кода

Merge branch t/engine/1186

Internal: Update API usage after merge t/1186 on engine.
Piotr Jasiun 8 лет назад
Родитель
Сommit
572b1a1434
2 измененных файлов с 74 добавлено и 75 удалено
  1. 20 22
      packages/ckeditor5-widget/src/widget.js
  2. 54 53
      packages/ckeditor5-widget/tests/widget.js

+ 20 - 22
packages/ckeditor5-widget/src/widget.js

@@ -122,7 +122,7 @@ export default class Widget extends Plugin {
 		// Create model selection over widget.
 		const modelElement = editor.editing.mapper.toModelElement( element );
 
-		editor.document.enqueueChanges( ( ) => {
+		editor.model.change( () => {
 			this._setSelectionOverElement( modelElement );
 		} );
 	}
@@ -168,7 +168,7 @@ export default class Widget extends Plugin {
 			return;
 		}
 
-		const modelDocument = this.editor.document;
+		const modelDocument = this.editor.model.document;
 		const modelSelection = modelDocument.selection;
 
 		// Do nothing on non-collapsed selection.
@@ -179,8 +179,7 @@ export default class Widget extends Plugin {
 		const objectElement = this._getObjectElementNextToSelection( isForward );
 
 		if ( objectElement ) {
-			modelDocument.enqueueChanges( () => {
-				const batch = modelDocument.batch();
+			this.editor.model.change( writer => {
 				let previousNode = modelSelection.anchor.parent;
 
 				// Remove previous element if empty.
@@ -188,7 +187,7 @@ export default class Widget extends Plugin {
 					const nodeToRemove = previousNode;
 					previousNode = nodeToRemove.parent;
 
-					batch.remove( nodeToRemove );
+					writer.remove( nodeToRemove );
 				}
 
 				this._setSelectionOverElement( objectElement );
@@ -205,8 +204,9 @@ export default class Widget extends Plugin {
 	 * @returns {Boolean|undefined} Returns `true` if keys were handled correctly.
 	 */
 	_handleArrowKeys( isForward ) {
-		const modelDocument = this.editor.document;
-		const schema = modelDocument.schema;
+		const model = this.editor.model;
+		const schema = model.schema;
+		const modelDocument = model.document;
 		const modelSelection = modelDocument.selection;
 		const objectElement = modelSelection.getSelectedElement();
 
@@ -216,7 +216,7 @@ export default class Widget extends Plugin {
 			const newRange = modelDocument.getNearestSelectionRange( position, isForward ? 'forward' : 'backward' );
 
 			if ( newRange ) {
-				modelDocument.enqueueChanges( () => {
+				model.change( () => {
 					modelSelection.setRanges( [ newRange ] );
 				} );
 			}
@@ -232,8 +232,8 @@ export default class Widget extends Plugin {
 
 		const objectElement2 = this._getObjectElementNextToSelection( isForward );
 
-		if ( objectElement2 instanceof ModelElement && modelDocument.schema.objects.has( objectElement2.name ) ) {
-			modelDocument.enqueueChanges( () => {
+		if ( objectElement2 instanceof ModelElement && schema.objects.has( objectElement2.name ) ) {
+			model.change( () => {
 				this._setSelectionOverElement( objectElement2 );
 			} );
 
@@ -250,16 +250,15 @@ export default class Widget extends Plugin {
 	 * @private
 	 */
 	_selectAllNestedEditableContent() {
-		const modelDocument = this.editor.document;
-		const modelSelection = modelDocument.selection;
-		const schema = modelDocument.schema;
-		const limitElement = schema.getLimitElement( modelSelection );
+		const model = this.editor.model;
+		const modelSelection = model.document.selection;
+		const limitElement = model.schema.getLimitElement( modelSelection );
 
 		if ( modelSelection.getFirstRange().root == limitElement ) {
 			return false;
 		}
 
-		modelDocument.enqueueChanges( () => {
+		model.change( () => {
 			modelSelection.setIn( limitElement );
 		} );
 
@@ -273,8 +272,8 @@ export default class Widget extends Plugin {
 	 * @returns {Boolean} Returns true if widget was selected and selecting all was handled by this method.
 	 */
 	_selectAllContent() {
-		const modelDocument = this.editor.document;
-		const modelSelection = modelDocument.selection;
+		const model = this.editor.model;
+		const modelSelection = model.document.selection;
 		const editing = this.editor.editing;
 		const viewDocument = editing.view;
 		const viewSelection = viewDocument.selection;
@@ -286,7 +285,7 @@ export default class Widget extends Plugin {
 		if ( selectedElement && isWidget( selectedElement ) ) {
 			const widgetParent = editing.mapper.toModelElement( selectedElement.parent );
 
-			modelDocument.enqueueChanges( () => {
+			model.change( () => {
 				modelSelection.setRanges( [ ModelRange.createIn( widgetParent ) ] );
 			} );
 
@@ -303,7 +302,7 @@ export default class Widget extends Plugin {
 	 * @param {module:engine/model/element~Element} element
 	 */
 	_setSelectionOverElement( element ) {
-		this.editor.document.selection.setRanges( [ ModelRange.createOn( element ) ] );
+		this.editor.model.document.selection.setRanges( [ ModelRange.createOn( element ) ] );
 	}
 
 	/**
@@ -316,9 +315,8 @@ export default class Widget extends Plugin {
 	 * @returns {module:engine/model/element~Element|null}
 	 */
 	_getObjectElementNextToSelection( forward ) {
-		const modelDocument = this.editor.document;
-		const schema = modelDocument.schema;
-		const modelSelection = modelDocument.selection;
+		const schema = this.editor.model.schema;
+		const modelSelection = this.editor.model.document.selection;
 		const dataController = this.editor.data;
 
 		// Clone current selection to use it as a probe. We must leave default selection as it is so it can return

+ 54 - 53
packages/ckeditor5-widget/tests/widget.js

@@ -19,44 +19,45 @@ import { keyCodes } from '@ckeditor/ckeditor5-utils/src/keyboard';
 /* global document */
 
 describe( 'Widget', () => {
-	let editor, doc, viewDocument;
+	let editor, model, doc, viewDocument;
 
 	beforeEach( () => {
 		return VirtualTestEditor.create( { plugins: [ Widget ] } )
 			.then( newEditor => {
 				editor = newEditor;
-				doc = editor.document;
+				model = editor.model;
+				doc = model.document;
 				viewDocument = editor.editing.view;
 
-				doc.schema.registerItem( 'widget', '$block' );
-				doc.schema.objects.add( 'widget' );
-				doc.schema.registerItem( 'paragraph', '$block' );
-				doc.schema.registerItem( 'inline', '$inline' );
-				doc.schema.objects.add( 'inline' );
-				doc.schema.registerItem( 'nested' );
-				doc.schema.limits.add( 'nested' );
-				doc.schema.allow( { name: '$inline', inside: 'nested' } );
-				doc.schema.allow( { name: 'nested', inside: 'widget' } );
-				doc.schema.registerItem( 'editable' );
-				doc.schema.allow( { name: '$inline', inside: 'editable' } );
-				doc.schema.allow( { name: 'editable', inside: 'widget' } );
-				doc.schema.allow( { name: 'editable', inside: '$root' } );
+				model.schema.registerItem( 'widget', '$block' );
+				model.schema.objects.add( 'widget' );
+				model.schema.registerItem( 'paragraph', '$block' );
+				model.schema.registerItem( 'inline', '$inline' );
+				model.schema.objects.add( 'inline' );
+				model.schema.registerItem( 'nested' );
+				model.schema.limits.add( 'nested' );
+				model.schema.allow( { name: '$inline', inside: 'nested' } );
+				model.schema.allow( { name: 'nested', inside: 'widget' } );
+				model.schema.registerItem( 'editable' );
+				model.schema.allow( { name: '$inline', inside: 'editable' } );
+				model.schema.allow( { name: 'editable', inside: 'widget' } );
+				model.schema.allow( { name: 'editable', inside: '$root' } );
 
 				// Image feature.
-				doc.schema.registerItem( 'image' );
-				doc.schema.allow( { name: 'image', inside: '$root' } );
-				doc.schema.objects.add( 'image' );
+				model.schema.registerItem( 'image' );
+				model.schema.allow( { name: 'image', inside: '$root' } );
+				model.schema.objects.add( 'image' );
 
 				// Block-quote feature.
-				doc.schema.registerItem( 'blockQuote' );
-				doc.schema.allow( { name: 'blockQuote', inside: '$root' } );
-				doc.schema.allow( { name: '$block', inside: 'blockQuote' } );
+				model.schema.registerItem( 'blockQuote' );
+				model.schema.allow( { name: 'blockQuote', inside: '$root' } );
+				model.schema.allow( { name: '$block', inside: 'blockQuote' } );
 
 				// Div element which helps nesting elements.
-				doc.schema.registerItem( 'div' );
-				doc.schema.allow( { name: 'div', inside: 'blockQuote' } );
-				doc.schema.allow( { name: 'div', inside: 'div' } );
-				doc.schema.allow( { name: 'paragraph', inside: 'div' } );
+				model.schema.registerItem( 'div' );
+				model.schema.allow( { name: 'div', inside: 'blockQuote' } );
+				model.schema.allow( { name: 'div', inside: 'div' } );
+				model.schema.allow( { name: 'paragraph', inside: 'div' } );
 
 				buildModelConverter().for( editor.editing.modelToView )
 					.fromElement( 'paragraph' )
@@ -106,7 +107,7 @@ describe( 'Widget', () => {
 	} );
 
 	it( 'should create selection over clicked widget', () => {
-		setModelData( doc, '[]<widget></widget>' );
+		setModelData( model, '[]<widget></widget>' );
 		const viewDiv = viewDocument.getRoot().getChild( 0 );
 		const domEventDataMock = {
 			target: viewDiv,
@@ -115,12 +116,12 @@ describe( 'Widget', () => {
 
 		viewDocument.fire( 'mousedown', domEventDataMock );
 
-		expect( getModelData( doc ) ).to.equal( '[<widget></widget>]' );
+		expect( getModelData( model ) ).to.equal( '[<widget></widget>]' );
 		sinon.assert.calledOnce( domEventDataMock.preventDefault );
 	} );
 
 	it( 'should create selection when clicked in nested element', () => {
-		setModelData( doc, '[]<widget></widget>' );
+		setModelData( model, '[]<widget></widget>' );
 		const viewDiv = viewDocument.getRoot().getChild( 0 );
 		const viewB = viewDiv.getChild( 0 );
 		const domEventDataMock = {
@@ -130,12 +131,12 @@ describe( 'Widget', () => {
 
 		viewDocument.fire( 'mousedown', domEventDataMock );
 
-		expect( getModelData( doc ) ).to.equal( '[<widget></widget>]' );
+		expect( getModelData( model ) ).to.equal( '[<widget></widget>]' );
 		sinon.assert.calledOnce( domEventDataMock.preventDefault );
 	} );
 
 	it( 'should do nothing if clicked inside nested editable', () => {
-		setModelData( doc, '[]<widget><nested>foo bar</nested></widget>' );
+		setModelData( model, '[]<widget><nested>foo bar</nested></widget>' );
 		const viewDiv = viewDocument.getRoot().getChild( 0 );
 		const viewFigcaption = viewDiv.getChild( 0 );
 
@@ -150,7 +151,7 @@ describe( 'Widget', () => {
 	} );
 
 	it( 'should do nothing if clicked in non-widget element', () => {
-		setModelData( doc, '<paragraph>[]foo bar</paragraph><widget></widget>' );
+		setModelData( model, '<paragraph>[]foo bar</paragraph><widget></widget>' );
 		const viewP = viewDocument.getRoot().getChild( 0 );
 		const domEventDataMock = {
 			target: viewP,
@@ -160,12 +161,12 @@ describe( 'Widget', () => {
 		viewDocument.focus();
 		viewDocument.fire( 'mousedown', domEventDataMock );
 
-		expect( getModelData( doc ) ).to.equal( '<paragraph>[]foo bar</paragraph><widget></widget>' );
+		expect( getModelData( model ) ).to.equal( '<paragraph>[]foo bar</paragraph><widget></widget>' );
 		sinon.assert.notCalled( domEventDataMock.preventDefault );
 	} );
 
 	it( 'should not focus editable if already is focused', () => {
-		setModelData( doc, '<widget></widget>' );
+		setModelData( model, '<widget></widget>' );
 		const widget = viewDocument.getRoot().getChild( 0 );
 		const domEventDataMock = {
 			target: widget,
@@ -178,11 +179,11 @@ describe( 'Widget', () => {
 
 		sinon.assert.calledOnce( domEventDataMock.preventDefault );
 		sinon.assert.notCalled( focusSpy );
-		expect( getModelData( doc ) ).to.equal( '[<widget></widget>]' );
+		expect( getModelData( model ) ).to.equal( '[<widget></widget>]' );
 	} );
 
 	it( 'should apply fake view selection if model selection is on widget element', () => {
-		setModelData( doc, '[<widget>foo bar</widget>]' );
+		setModelData( model, '[<widget>foo bar</widget>]' );
 
 		expect( getViewData( viewDocument ) ).to.equal(
 			'[<div class="ck-widget ck-widget_selected" contenteditable="false">foo bar<b></b></div>]'
@@ -191,13 +192,13 @@ describe( 'Widget', () => {
 	} );
 
 	it( 'should use element\'s label to set fake selection if one is provided', () => {
-		setModelData( doc, '[<widget>foo bar</widget>]' );
+		setModelData( model, '[<widget>foo bar</widget>]' );
 
 		expect( viewDocument.selection.fakeSelectionLabel ).to.equal( 'element label' );
 	} );
 
 	it( 'should add selected class when no only a widget is selected', () => {
-		setModelData( doc, '[<paragraph>foo</paragraph><widget></widget><widget></widget>]' );
+		setModelData( model, '[<paragraph>foo</paragraph><widget></widget><widget></widget>]' );
 
 		expect( viewDocument.selection.isFake ).to.be.false;
 		expect( getViewData( viewDocument ) ).to.equal(
@@ -210,19 +211,19 @@ describe( 'Widget', () => {
 	} );
 
 	it( 'fake selection should be empty if widget is not selected', () => {
-		setModelData( doc, '<paragraph>foo</paragraph><widget>foo bar</widget>' );
+		setModelData( model, '<paragraph>foo</paragraph><widget>foo bar</widget>' );
 
 		expect( viewDocument.selection.fakeSelectionLabel ).to.equal( '' );
 	} );
 
 	it( 'should toggle selected class', () => {
-		setModelData( doc, '<paragraph>foo</paragraph>[<widget>foo</widget>]' );
+		setModelData( model, '<paragraph>foo</paragraph>[<widget>foo</widget>]' );
 
 		expect( getViewData( viewDocument ) ).to.equal(
 			'<p>foo</p>[<div class="ck-widget ck-widget_selected" contenteditable="false">foo<b></b></div>]'
 		);
 
-		doc.enqueueChanges( () => {
+		model.change( () => {
 			doc.selection.removeAllRanges();
 		} );
 
@@ -232,7 +233,7 @@ describe( 'Widget', () => {
 	} );
 
 	it( 'should do nothing when selection is placed in other editable', () => {
-		setModelData( doc, '<widget><editable>foo bar</editable></widget><editable>[baz]</editable>' );
+		setModelData( model, '<widget><editable>foo bar</editable></widget><editable>[baz]</editable>' );
 
 		expect( getViewData( viewDocument ) ).to.equal(
 			'<div class="ck-widget" contenteditable="false">' +
@@ -482,12 +483,12 @@ describe( 'Widget', () => {
 					keyCode: keyCodes.delete,
 					preventDefault: sinon.spy(),
 				};
-				setModelData( doc, '<paragraph>foo[]</paragraph><widget></widget>' );
+				setModelData( model, '<paragraph>foo[]</paragraph><widget></widget>' );
 				viewDocument.on( 'keydown', keydownHandler );
 
 				viewDocument.fire( 'keydown', domEventDataMock );
 
-				expect( getModelData( doc ) ).to.equal( '<paragraph>foo</paragraph>[<widget></widget>]' );
+				expect( getModelData( model ) ).to.equal( '<paragraph>foo</paragraph>[<widget></widget>]' );
 				sinon.assert.calledOnce( domEventDataMock.preventDefault );
 				sinon.assert.notCalled( keydownHandler );
 			} );
@@ -621,7 +622,7 @@ describe( 'Widget', () => {
 			);
 
 			it( 'does nothing when editor when read only mode is enabled (delete)', () => {
-				setModelData( doc,
+				setModelData( model,
 					'<paragraph>foo</paragraph>' +
 					'<image></image>' +
 					'<blockQuote><paragraph>[]</paragraph></blockQuote>' +
@@ -636,7 +637,7 @@ describe( 'Widget', () => {
 					{ keyCode: keyCodes.backspace }
 				) );
 
-				expect( getModelData( doc ) ).to.equal(
+				expect( getModelData( model ) ).to.equal(
 					'<paragraph>foo</paragraph>' +
 					'<image></image>' +
 					'<blockQuote><paragraph>[]</paragraph></blockQuote>' +
@@ -645,7 +646,7 @@ describe( 'Widget', () => {
 			} );
 
 			it( 'does nothing when editor when read only mode is enabled (forward delete)', () => {
-				setModelData( doc,
+				setModelData( model,
 					'<paragraph>foo</paragraph>' +
 					'<blockQuote><paragraph>[]</paragraph></blockQuote>' +
 					'<image></image>' +
@@ -660,7 +661,7 @@ describe( 'Widget', () => {
 					{ keyCode: keyCodes.delete }
 				) );
 
-				expect( getModelData( doc ) ).to.equal(
+				expect( getModelData( model ) ).to.equal(
 					'<paragraph>foo</paragraph>' +
 					'<blockQuote><paragraph>[]</paragraph></blockQuote>' +
 					'<image></image>' +
@@ -788,12 +789,12 @@ describe( 'Widget', () => {
 					keyCode: keyCodes.arrowright,
 					preventDefault: sinon.spy(),
 				};
-				setModelData( doc, '<paragraph>foo</paragraph>[<widget></widget>]' );
+				setModelData( model, '<paragraph>foo</paragraph>[<widget></widget>]' );
 				viewDocument.on( 'keydown', keydownHandler );
 
 				viewDocument.fire( 'keydown', domEventDataMock );
 
-				expect( getModelData( doc ) ).to.equal( '<paragraph>foo</paragraph>[<widget></widget>]' );
+				expect( getModelData( model ) ).to.equal( '<paragraph>foo</paragraph>[<widget></widget>]' );
 				sinon.assert.calledOnce( domEventDataMock.preventDefault );
 				sinon.assert.notCalled( keydownHandler );
 			} );
@@ -804,12 +805,12 @@ describe( 'Widget', () => {
 					keyCode: keyCodes.arrowleft,
 					preventDefault: sinon.spy(),
 				};
-				setModelData( doc, '[<widget></widget>]<paragraph>foo</paragraph>' );
+				setModelData( model, '[<widget></widget>]<paragraph>foo</paragraph>' );
 				viewDocument.on( 'keydown', keydownHandler );
 
 				viewDocument.fire( 'keydown', domEventDataMock );
 
-				expect( getModelData( doc ) ).to.equal( '[<widget></widget>]<paragraph>foo</paragraph>' );
+				expect( getModelData( model ) ).to.equal( '[<widget></widget>]<paragraph>foo</paragraph>' );
 				sinon.assert.calledOnce( domEventDataMock.preventDefault );
 				sinon.assert.notCalled( keydownHandler );
 			} );
@@ -1105,14 +1106,14 @@ describe( 'Widget', () => {
 					keyCode: keyCodeOrMock
 				};
 
-				setModelData( doc, data );
+				setModelData( model, data );
 				viewDocument.fire( 'keydown', new DomEventData(
 					viewDocument,
 					{ target: document.createElement( 'div' ), preventDefault: () => {} },
 					domEventDataMock
 				) );
 
-				expect( getModelData( doc ) ).to.equal( expected );
+				expect( getModelData( model ) ).to.equal( expected );
 
 				if ( expectedView ) {
 					expect( getViewData( viewDocument ) ).to.equal( expectedView );