Procházet zdrojové kódy

Adjusted to changes made in engine view.

Szymon Kupś před 7 roky
rodič
revize
309a9f484b

+ 8 - 7
packages/ckeditor5-clipboard/src/clipboard.js

@@ -118,8 +118,9 @@ export default class Clipboard extends Plugin {
 	 */
 	init() {
 		const editor = this.editor;
-		const doc = editor.model.document;
-		const viewDocument = editor.editing.view.document;
+		const modelDocument = editor.model.document;
+		const view = editor.editing.view;
+		const viewDocument = view.document;
 
 		/**
 		 * Data processor used to convert pasted HTML to a view structure.
@@ -129,7 +130,7 @@ export default class Clipboard extends Plugin {
 		 */
 		this._htmlDataProcessor = new HtmlDataProcessor();
 
-		viewDocument.addObserver( ClipboardObserver );
+		view.addObserver( ClipboardObserver );
 
 		// The clipboard paste pipeline.
 
@@ -153,7 +154,7 @@ export default class Clipboard extends Plugin {
 
 			this.fire( 'inputTransformation', { content } );
 
-			viewDocument.scrollToTheSelection();
+			view.scrollToTheSelection();
 		}, { priority: 'low' } );
 
 		this.listenTo( this, 'inputTransformation', ( evt, data ) => {
@@ -170,7 +171,7 @@ export default class Clipboard extends Plugin {
 					return;
 				}
 
-				model.insertContent( modelFragment, doc.selection );
+				model.insertContent( modelFragment, modelDocument.selection );
 			}
 		}, { priority: 'low' } );
 
@@ -181,7 +182,7 @@ export default class Clipboard extends Plugin {
 
 			data.preventDefault();
 
-			const content = editor.data.toView( editor.model.getSelectedContent( doc.selection ) );
+			const content = editor.data.toView( editor.model.getSelectedContent( modelDocument.selection ) );
 
 			viewDocument.fire( 'clipboardOutput', { dataTransfer, content, method: evt.name } );
 		}
@@ -204,7 +205,7 @@ export default class Clipboard extends Plugin {
 			}
 
 			if ( data.method == 'cut' ) {
-				editor.model.deleteContent( doc.selection );
+				editor.model.deleteContent( modelDocument.selection );
 			}
 		}, { priority: 'low' } );
 	}

+ 12 - 10
packages/ckeditor5-clipboard/src/clipboardobserver.js

@@ -19,20 +19,22 @@ import DataTransfer from './datatransfer';
  * @extends module:engine/view/observer/domeventobserver~DomEventObserver
  */
 export default class ClipboardObserver extends DomEventObserver {
-	constructor( doc ) {
-		super( doc );
+	constructor( view ) {
+		super( view );
+
+		const viewDocument = this.document;
 
 		this.domEventType = [ 'paste', 'copy', 'cut', 'drop', 'dragover' ];
 
-		this.listenTo( doc, 'paste', handleInput, { priority: 'low' } );
-		this.listenTo( doc, 'drop', handleInput, { priority: 'low' } );
+		this.listenTo( viewDocument, 'paste', handleInput, { priority: 'low' } );
+		this.listenTo( viewDocument, 'drop', handleInput, { priority: 'low' } );
 
 		function handleInput( evt, data ) {
 			data.preventDefault();
 
-			const targetRanges = data.dropRange ? [ data.dropRange ] : Array.from( doc.selection.getRanges() );
+			const targetRanges = data.dropRange ? [ data.dropRange ] : Array.from( viewDocument.selection.getRanges() );
 
-			doc.fire( 'clipboardInput', {
+			viewDocument.fire( 'clipboardInput', {
 				dataTransfer: data.dataTransfer,
 				targetRanges
 			} );
@@ -45,14 +47,14 @@ export default class ClipboardObserver extends DomEventObserver {
 		};
 
 		if ( domEvent.type == 'drop' ) {
-			evtData.dropRange = getDropViewRange( this.document, domEvent );
+			evtData.dropRange = getDropViewRange( this.view, domEvent );
 		}
 
 		this.fire( domEvent.type, domEvent, evtData );
 	}
 }
 
-function getDropViewRange( doc, domEvent ) {
+function getDropViewRange( view, domEvent ) {
 	const domDoc = domEvent.target.ownerDocument;
 	const x = domEvent.clientX;
 	const y = domEvent.clientY;
@@ -70,9 +72,9 @@ function getDropViewRange( doc, domEvent ) {
 	}
 
 	if ( domRange ) {
-		return doc.domConverter.domRangeToView( domRange );
+		return view.domConverter.domRangeToView( domRange );
 	} else {
-		return doc.selection.getFirstRange();
+		return view.document.selection.getFirstRange();
 	}
 }
 

+ 39 - 38
packages/ckeditor5-clipboard/tests/clipboard.js

@@ -23,7 +23,7 @@ import ViewDocumentFragment from '@ckeditor/ckeditor5-engine/src/view/documentfr
 import ViewText from '@ckeditor/ckeditor5-engine/src/view/text';
 
 describe( 'Clipboard feature', () => {
-	let editor, editingView, clipboardPlugin, scrollSpy;
+	let editor, view, viewDocument, clipboardPlugin, scrollSpy;
 
 	beforeEach( () => {
 		return VirtualTestEditor
@@ -32,18 +32,19 @@ describe( 'Clipboard feature', () => {
 			} )
 			.then( newEditor => {
 				editor = newEditor;
-				editingView = editor.editing.view;
+				view = editor.editing.view;
+				viewDocument = editor.editing.view.document;
 				clipboardPlugin = editor.plugins.get( 'Clipboard' );
 
 				// VirtualTestEditor has no DOM, so this method must be stubbed for all tests.
 				// Otherwise it will throw as it accesses the DOM to do its job.
-				scrollSpy = sinon.stub( editingView, 'scrollToTheSelection' );
+				scrollSpy = sinon.stub( view, 'scrollToTheSelection' );
 			} );
 	} );
 
 	describe( 'constructor()', () => {
 		it( 'registers ClipboardObserver', () => {
-			expect( editingView.getObserver( ClipboardObserver ) ).to.be.instanceOf( ClipboardObserver );
+			expect( view.getObserver( ClipboardObserver ) ).to.be.instanceOf( ClipboardObserver );
 		} );
 	} );
 
@@ -53,14 +54,14 @@ describe( 'Clipboard feature', () => {
 				const dataTransferMock = createDataTransfer( { 'text/html': '<p>x</p>', 'text/plain': 'y' } );
 				const preventDefaultSpy = sinon.spy();
 
-				editingView.on( 'clipboardInput', ( evt, data ) => {
+				viewDocument.on( 'clipboardInput', ( evt, data ) => {
 					expect( preventDefaultSpy.calledOnce ).to.be.true;
 					expect( data.dataTransfer ).to.equal( dataTransferMock );
 
 					done();
 				} );
 
-				editingView.fire( 'paste', {
+				viewDocument.fire( 'paste', {
 					dataTransfer: dataTransferMock,
 					preventDefault: preventDefaultSpy
 				} );
@@ -77,7 +78,7 @@ describe( 'Clipboard feature', () => {
 					done();
 				} );
 
-				editingView.fire( 'paste', {
+				viewDocument.fire( 'paste', {
 					dataTransfer: dataTransferMock,
 					preventDefault: preventDefaultSpy
 				} );
@@ -89,14 +90,14 @@ describe( 'Clipboard feature', () => {
 				const dataTransferMock = createDataTransfer( { 'text/plain': 'x\n\ny  z' } );
 				const preventDefaultSpy = sinon.spy();
 
-				editingView.on( 'clipboardInput', ( evt, data ) => {
+				viewDocument.on( 'clipboardInput', ( evt, data ) => {
 					expect( preventDefaultSpy.calledOnce ).to.be.true;
 					expect( data.dataTransfer ).to.equal( dataTransferMock );
 
 					done();
 				} );
 
-				editingView.fire( 'paste', {
+				viewDocument.fire( 'paste', {
 					dataTransfer: dataTransferMock,
 					preventDefault: preventDefaultSpy
 				} );
@@ -113,7 +114,7 @@ describe( 'Clipboard feature', () => {
 					done();
 				} );
 
-				editingView.fire( 'paste', {
+				viewDocument.fire( 'paste', {
 					dataTransfer: dataTransferMock,
 					preventDefault: preventDefaultSpy
 				} );
@@ -125,7 +126,7 @@ describe( 'Clipboard feature', () => {
 			const preventDefaultSpy = sinon.spy();
 			const editorViewCalled = sinon.spy();
 
-			editingView.on( 'clipboardInput', ( evt, data ) => {
+			viewDocument.on( 'clipboardInput', ( evt, data ) => {
 				expect( preventDefaultSpy.calledOnce ).to.be.true;
 
 				expect( data.dataTransfer ).to.equal( dataTransferMock );
@@ -142,7 +143,7 @@ describe( 'Clipboard feature', () => {
 				done();
 			} );
 
-			editingView.fire( 'paste', {
+			viewDocument.fire( 'paste', {
 				dataTransfer: dataTransferMock,
 				preventDefault: preventDefaultSpy
 			} );
@@ -152,13 +153,13 @@ describe( 'Clipboard feature', () => {
 			const dataTransferMock = createDataTransfer( { 'text/html': 'x' } );
 			const spy = sinon.spy();
 
-			editingView.on( 'paste', evt => {
+			viewDocument.on( 'paste', evt => {
 				evt.stop();
 			} );
 
-			editingView.on( 'clipboardInput', spy );
+			viewDocument.on( 'clipboardInput', spy );
 
-			editingView.fire( 'paste', {
+			viewDocument.fire( 'paste', {
 				dataTransfer: dataTransferMock,
 				preventDefault() {}
 			} );
@@ -170,7 +171,7 @@ describe( 'Clipboard feature', () => {
 			const dataTransferMock = createDataTransfer( { 'text/html': '<p>x</p>', 'text/plain': 'y' } );
 			const spy = sinon.stub( editor.model, 'insertContent' );
 
-			editingView.fire( 'paste', {
+			viewDocument.fire( 'paste', {
 				dataTransfer: dataTransferMock,
 				preventDefault() {}
 			} );
@@ -185,7 +186,7 @@ describe( 'Clipboard feature', () => {
 
 			editor.isReadOnly = true;
 
-			editingView.fire( 'paste', {
+			viewDocument.fire( 'paste', {
 				dataTransfer: dataTransferMock,
 				preventDefault() {}
 			} );
@@ -199,7 +200,7 @@ describe( 'Clipboard feature', () => {
 			const dataTransferMock = createDataTransfer( { 'text/html': '<unknownTag></unknownTag>', 'text/plain': '' } );
 			const spy = sinon.stub( editor.model, 'insertContent' );
 
-			editingView.fire( 'paste', {
+			viewDocument.fire( 'paste', {
 				dataTransfer: dataTransferMock,
 				preventDefault() {}
 			} );
@@ -213,7 +214,7 @@ describe( 'Clipboard feature', () => {
 			const dataTransferMock = createDataTransfer( { 'text/html': 'x<p>y</p>', 'text/plain': 'z' } );
 			const spy = sinon.stub( editor.model, 'insertContent' );
 
-			editingView.fire( 'paste', {
+			viewDocument.fire( 'paste', {
 				dataTransfer: dataTransferMock,
 				preventDefault() {}
 			} );
@@ -226,7 +227,7 @@ describe( 'Clipboard feature', () => {
 			const dataTransferMock = createDataTransfer( { 'text/plain': '' } );
 			const spy = sinon.stub( editor.model, 'insertContent' );
 
-			editingView.fire( 'clipboardInput', {
+			viewDocument.fire( 'clipboardInput', {
 				dataTransfer: dataTransferMock,
 				content: new ViewDocumentFragment()
 			} );
@@ -240,7 +241,7 @@ describe( 'Clipboard feature', () => {
 
 			clipboardPlugin.on( 'inputTransformation', inputTransformationSpy );
 
-			editingView.fire( 'clipboardInput', {
+			viewDocument.fire( 'clipboardInput', {
 				dataTransfer: dataTransferMock,
 				content: new ViewDocumentFragment()
 			} );
@@ -253,11 +254,11 @@ describe( 'Clipboard feature', () => {
 			const dataTransferMock = createDataTransfer( { 'text/html': 'x' } );
 			const spy = sinon.stub( editor.model, 'insertContent' );
 
-			editingView.on( 'clipboardInput', evt => {
+			viewDocument.on( 'clipboardInput', evt => {
 				evt.stop();
 			} );
 
-			editingView.fire( 'paste', {
+			viewDocument.fire( 'paste', {
 				dataTransfer: dataTransferMock,
 				preventDefault() {}
 			} );
@@ -281,7 +282,7 @@ describe( 'Clipboard feature', () => {
 
 			setModelData( editor.model, '<paragraph>a[bc</paragraph><paragraph>de]f</paragraph>' );
 
-			editingView.on( 'clipboardOutput', ( evt, data ) => {
+			viewDocument.on( 'clipboardOutput', ( evt, data ) => {
 				expect( preventDefaultSpy.calledOnce ).to.be.true;
 				expect( data.method ).to.equal( 'copy' );
 
@@ -293,7 +294,7 @@ describe( 'Clipboard feature', () => {
 				done();
 			} );
 
-			editingView.fire( 'copy', {
+			viewDocument.fire( 'copy', {
 				dataTransfer: dataTransferMock,
 				preventDefault: preventDefaultSpy
 			} );
@@ -305,13 +306,13 @@ describe( 'Clipboard feature', () => {
 
 			setModelData( editor.model, '<paragraph>a[bc</paragraph><paragraph>de]f</paragraph>' );
 
-			editingView.on( 'clipboardOutput', ( evt, data ) => {
+			viewDocument.on( 'clipboardOutput', ( evt, data ) => {
 				expect( data.method ).to.equal( 'cut' );
 
 				done();
 			} );
 
-			editingView.fire( 'cut', {
+			viewDocument.fire( 'cut', {
 				dataTransfer: dataTransferMock,
 				preventDefault: preventDefaultSpy
 			} );
@@ -325,9 +326,9 @@ describe( 'Clipboard feature', () => {
 			setModelData( editor.model, '<paragraph>a[bc</paragraph><paragraph>de]f</paragraph>' );
 			editor.isReadOnly = true;
 
-			editingView.on( 'clipboardOutput', spy );
+			viewDocument.on( 'clipboardOutput', spy );
 
-			editingView.fire( 'cut', {
+			viewDocument.fire( 'cut', {
 				dataTransfer: dataTransferMock,
 				preventDefault: preventDefaultSpy
 			} );
@@ -340,13 +341,13 @@ describe( 'Clipboard feature', () => {
 			const dataTransferMock = createDataTransfer();
 			const spy = sinon.spy();
 
-			editingView.on( 'copy', evt => {
+			viewDocument.on( 'copy', evt => {
 				evt.stop();
 			} );
 
-			editingView.on( 'clipboardOutput', spy );
+			viewDocument.on( 'clipboardOutput', spy );
 
-			editingView.fire( 'copy', {
+			viewDocument.fire( 'copy', {
 				dataTransfer: dataTransferMock,
 				preventDefault() {}
 			} );
@@ -395,7 +396,7 @@ describe( 'Clipboard feature', () => {
 					'<figcaption>caption</figcaption>' +
 				'</figure>';
 
-			editingView.fire( 'clipboardOutput', {
+			viewDocument.fire( 'clipboardOutput', {
 				dataTransfer: dataTransferMock,
 				content: parseView( input ),
 				method: 'copy'
@@ -442,7 +443,7 @@ describe( 'Clipboard feature', () => {
 				'image foo\n' +
 				'caption';
 
-			editingView.fire( 'clipboardOutput', {
+			viewDocument.fire( 'clipboardOutput', {
 				dataTransfer: dataTransferMock,
 				content: parseView( input ),
 				method: 'copy'
@@ -454,7 +455,7 @@ describe( 'Clipboard feature', () => {
 		it( 'does not set clipboard HTML data if content is empty', () => {
 			const dataTransferMock = createDataTransfer();
 
-			editingView.fire( 'clipboardOutput', {
+			viewDocument.fire( 'clipboardOutput', {
 				dataTransfer: dataTransferMock,
 				content: new ViewDocumentFragment(),
 				method: 'copy'
@@ -471,7 +472,7 @@ describe( 'Clipboard feature', () => {
 			// Change block is only to get writer instance.
 			// Writer should not be passed along this event.
 			editor.model.change( writer => {
-				editingView.fire( 'clipboardOutput', {
+				viewDocument.fire( 'clipboardOutput', {
 					dataTransfer: dataTransferMock,
 					content: new ViewDocumentFragment(),
 					method: 'cut',
@@ -485,11 +486,11 @@ describe( 'Clipboard feature', () => {
 		it( 'uses low priority observer for the clipboardOutput event', () => {
 			const dataTransferMock = createDataTransfer();
 
-			editingView.on( 'clipboardOutput', evt => {
+			viewDocument.on( 'clipboardOutput', evt => {
 				evt.stop();
 			} );
 
-			editingView.fire( 'copy', {
+			viewDocument.fire( 'copy', {
 				dataTransfer: dataTransferMock,
 				content: new ViewDocumentFragment( [ new ViewText( 'abc' ) ] ),
 				preventDefault() {}

+ 9 - 8
packages/ckeditor5-clipboard/tests/clipboardobserver.js

@@ -6,7 +6,7 @@
 /* globals document */
 
 import ClipboardObserver from '../src/clipboardobserver';
-import Document from '@ckeditor/ckeditor5-engine/src/view/document';
+import View from '@ckeditor/ckeditor5-engine/src/view/view';
 import Element from '@ckeditor/ckeditor5-engine/src/view/element';
 import Range from '@ckeditor/ckeditor5-engine/src/view/range';
 import Position from '@ckeditor/ckeditor5-engine/src/view/position';
@@ -14,23 +14,24 @@ import DataTransfer from '../src/datatransfer';
 import createViewRoot from '@ckeditor/ckeditor5-engine/tests/view/_utils/createroot';
 
 describe( 'ClipboardObserver', () => {
-	let doc, observer, root, el, range, eventSpy, preventDefaultSpy;
+	let view, doc, observer, root, el, range, eventSpy, preventDefaultSpy;
 
 	beforeEach( () => {
-		doc = new Document();
+		view = new View();
+		doc = view.document;
 		root = createViewRoot( doc );
 
 		// Create view and DOM structures.
 		el = new Element( 'p' );
 		root.appendChildren( el );
-		doc.domConverter.viewToDom( root, document, { withChildren: true, bind: true } );
+		view.domConverter.viewToDom( root, document, { withChildren: true, bind: true } );
 
-		doc.selection.setTo( el );
+		doc.selection._setTo( el );
 		range = new Range( new Position( root, 1 ) );
 		// Just making sure that the following tests will check anything.
 		expect( range.isEqual( doc.selection.getFirstRange() ) ).to.be.false;
 
-		observer = doc.addObserver( ClipboardObserver );
+		observer = view.addObserver( ClipboardObserver );
 
 		eventSpy = sinon.spy();
 		preventDefaultSpy = sinon.spy();
@@ -118,7 +119,7 @@ describe( 'ClipboardObserver', () => {
 		it( 'should be fired with the right event data – dropRange (when document.caretRangeFromPoint present)', () => {
 			let caretRangeFromPointCalledWith;
 
-			const domRange = doc.domConverter.viewRangeToDom( range );
+			const domRange = view.domConverter.viewRangeToDom( range );
 			const dataTransfer = mockDomDataTransfer();
 			const targetElement = mockDomTargetElement( {
 				caretRangeFromPoint( x, y ) {
@@ -148,7 +149,7 @@ describe( 'ClipboardObserver', () => {
 		} );
 
 		it( 'should be fired with the right event data – dropRange (when evt.rangeParent|Offset present)', () => {
-			const domRange = doc.domConverter.viewRangeToDom( range );
+			const domRange = view.domConverter.viewRangeToDom( range );
 			const dataTransfer = mockDomDataTransfer();
 			const targetElement = mockDomTargetElement( {
 				createRange() {

+ 1 - 1
packages/ckeditor5-clipboard/tests/pasting-integration.js

@@ -194,7 +194,7 @@ describe( 'Pasting – integration', () => {
 } );
 
 function pasteHtml( editor, html ) {
-	editor.editing.view.fire( 'paste', {
+	editor.editing.view.document.fire( 'paste', {
 		dataTransfer: createDataTransfer( { 'text/html': html } ),
 		preventDefault() {}
 	} );