Browse Source

Get rid of model parameter from downcast dispatcher.

Szymon Kupś 7 years ago
parent
commit
ef1c42b655

+ 1 - 1
packages/ckeditor5-engine/src/controller/datacontroller.js

@@ -76,7 +76,7 @@ export default class DataController {
 		 * @readonly
 		 * @member {module:engine/conversion/downcastdispatcher~DowncastDispatcher}
 		 */
-		this.downcastDispatcher = new DowncastDispatcher( this.model, {
+		this.downcastDispatcher = new DowncastDispatcher( {
 			mapper: this.mapper
 		} );
 		this.downcastDispatcher.on( 'insert:$text', insertText(), { priority: 'lowest' } );

+ 4 - 2
packages/ckeditor5-engine/src/controller/editingcontroller.js

@@ -70,16 +70,18 @@ export default class EditingController {
 		 * @readonly
 		 * @member {module:engine/conversion/downcastdispatcher~DowncastDispatcher} #downcastDispatcher
 		 */
-		this.downcastDispatcher = new DowncastDispatcher( this.model, {
+		this.downcastDispatcher = new DowncastDispatcher( {
 			mapper: this.mapper
 		} );
 
 		const doc = this.model.document;
+		const selection = doc.selection;
+		const markers = this.model.markers;
 
 		this.listenTo( doc, 'change', () => {
 			this.view.change( writer => {
 				this.downcastDispatcher.convertChanges( doc.differ, writer );
-				this.downcastDispatcher.convertSelection( doc.selection, writer );
+				this.downcastDispatcher.convertSelection( selection, markers, writer );
 			} );
 		}, { priority: 'low' } );
 

+ 7 - 14
packages/ckeditor5-engine/src/conversion/downcastdispatcher.js

@@ -105,18 +105,9 @@ export default class DowncastDispatcher {
 	/**
 	 * Creates a `DowncastDispatcher` instance.
 	 *
-	 * @param {module:engine/model/model~Model} model Data model.
 	 * @param {Object} [conversionApi] Interface passed by dispatcher to the events calls.
 	 */
-	constructor( model, conversionApi = {} ) {
-		/**
-		 * Data model instance bound with this dispatcher.
-		 *
-		 * @private
-		 * @member {module:engine/model/model~Model}
-		 */
-		this._model = model;
-
+	constructor( conversionApi = {} ) {
 		/**
 		 * Interface passed by dispatcher to the events callbacks.
 		 *
@@ -250,12 +241,14 @@ export default class DowncastDispatcher {
 	 * @fires addMarker
 	 * @fires attribute
 	 * @param {module:engine/model/selection~Selection} selection Selection to convert.
+	 * @param {module:engine/model/selection~Selection} Array<module:engine/model/markercollection~Marker> markers
+	 * Array of markers containing model markers.
 	 * @param {module:engine/view/writer~Writer} writer View writer that should be used to modify view document.
 	 */
-	convertSelection( selection, writer ) {
+	convertSelection( selection, markers, writer ) {
 		this.conversionApi.writer = writer;
-		const markers = Array.from( this._model.markers.getMarkersAtPosition( selection.getFirstPosition() ) );
-		const consumable = this._createSelectionConsumable( selection, markers );
+		const markersAtSelection = Array.from( markers.getMarkersAtPosition( selection.getFirstPosition() ) );
+		const consumable = this._createSelectionConsumable( selection, markersAtSelection );
 
 		this.fire( 'selection', { selection }, consumable, this.conversionApi );
 
@@ -263,7 +256,7 @@ export default class DowncastDispatcher {
 			return;
 		}
 
-		for ( const marker of markers ) {
+		for ( const marker of markersAtSelection ) {
 			const markerRange = marker.getRange();
 
 			if ( !shouldMarkerChangeBeConverted( selection.getFirstPosition(), marker, this.conversionApi.mapper ) ) {

+ 2 - 2
packages/ckeditor5-engine/src/dev-utils/model.js

@@ -202,7 +202,7 @@ export function stringify( node, selectionOrPositionOrRange = null ) {
 	viewDocument.roots.add( viewRoot );
 
 	// Create and setup downcast dispatcher.
-	const downcastDispatcher = new DowncastDispatcher( model, { mapper } );
+	const downcastDispatcher = new DowncastDispatcher( { mapper } );
 
 	// Bind root elements.
 	mapper.bindElements( node.root, viewRoot );
@@ -228,7 +228,7 @@ export function stringify( node, selectionOrPositionOrRange = null ) {
 
 	// Convert model selection to view selection.
 	if ( selection ) {
-		downcastDispatcher.convertSelection( selection, writer );
+		downcastDispatcher.convertSelection( selection, model.markers, writer );
 	}
 
 	// Parse view to data string.

+ 12 - 12
packages/ckeditor5-engine/tests/conversion/downcast-selection-converters.js

@@ -54,7 +54,7 @@ describe( 'downcast-selection-converters', () => {
 
 		highlightDescriptor = { class: 'marker', priority: 1 };
 
-		dispatcher = new DowncastDispatcher( model, { mapper, viewSelection } );
+		dispatcher = new DowncastDispatcher( { mapper, viewSelection } );
 
 		dispatcher.on( 'insert:$text', insertText() );
 
@@ -209,7 +209,7 @@ describe( 'downcast-selection-converters', () => {
 				view.change( writer => {
 					dispatcher.convertInsert( ModelRange.createIn( modelRoot ), writer );
 					dispatcher.convertMarkerAdd( marker.name, marker.getRange(), writer );
-					dispatcher.convertSelection( docSelection, writer );
+					dispatcher.convertSelection( docSelection, model.markers, writer );
 				} );
 
 				// Stringify view and check if it is same as expected.
@@ -234,7 +234,7 @@ describe( 'downcast-selection-converters', () => {
 				view.change( writer => {
 					dispatcher.convertInsert( ModelRange.createIn( modelRoot ), writer );
 					dispatcher.convertMarkerAdd( marker.name, marker.getRange(), writer );
-					dispatcher.convertSelection( docSelection, writer );
+					dispatcher.convertSelection( docSelection, model.markers, writer );
 				} );
 
 				// Stringify view and check if it is same as expected.
@@ -261,7 +261,7 @@ describe( 'downcast-selection-converters', () => {
 				view.change( writer => {
 					dispatcher.convertInsert( ModelRange.createIn( modelRoot ), writer );
 					dispatcher.convertMarkerAdd( marker.name, marker.getRange(), writer );
-					dispatcher.convertSelection( docSelection, writer );
+					dispatcher.convertSelection( docSelection, model.markers, writer );
 				} );
 
 				// Stringify view and check if it is same as expected.
@@ -286,7 +286,7 @@ describe( 'downcast-selection-converters', () => {
 				view.change( writer => {
 					dispatcher.convertInsert( ModelRange.createIn( modelRoot ), writer );
 					dispatcher.convertMarkerAdd( marker.name, marker.getRange(), writer );
-					dispatcher.convertSelection( docSelection, writer );
+					dispatcher.convertSelection( docSelection, model.markers, writer );
 				} );
 
 				// Stringify view and check if it is same as expected.
@@ -311,7 +311,7 @@ describe( 'downcast-selection-converters', () => {
 
 				// Convert model to view.
 				view.change( writer => {
-					dispatcher.convertSelection( docSelection, writer );
+					dispatcher.convertSelection( docSelection, model.markers, writer );
 				} );
 
 				// Stringify view and check if it is same as expected.
@@ -336,7 +336,7 @@ describe( 'downcast-selection-converters', () => {
 					const uiElement = new ViewUIElement( 'span' );
 					viewRoot.insertChildren( 1, uiElement );
 
-					dispatcher.convertSelection( docSelection, writer );
+					dispatcher.convertSelection( docSelection, model.markers, writer );
 				} );
 
 				// Stringify view and check if it is same as expected.
@@ -360,7 +360,7 @@ describe( 'downcast-selection-converters', () => {
 					// Add ui element to view.
 					const uiElement = new ViewUIElement( 'span' );
 					viewRoot.insertChildren( 1, uiElement, writer );
-					dispatcher.convertSelection( docSelection, writer );
+					dispatcher.convertSelection( docSelection, model.markers, writer );
 				} );
 
 				// Stringify view and check if it is same as expected.
@@ -441,7 +441,7 @@ describe( 'downcast-selection-converters', () => {
 						writer.setSelection( modelRange );
 					} );
 
-					dispatcher.convertSelection( modelDoc.selection, writer );
+					dispatcher.convertSelection( modelDoc.selection, model.markers, writer );
 				} );
 
 				expect( viewSelection.rangeCount ).to.equal( 1 );
@@ -467,7 +467,7 @@ describe( 'downcast-selection-converters', () => {
 						writer.setSelection( modelRange );
 					} );
 
-					dispatcher.convertSelection( modelDoc.selection, writer );
+					dispatcher.convertSelection( modelDoc.selection, model.markers, writer );
 				} );
 
 				expect( viewSelection.rangeCount ).to.equal( 1 );
@@ -483,7 +483,7 @@ describe( 'downcast-selection-converters', () => {
 
 				view.change( writer => {
 					writer.setFakeSelection( true );
-					dispatcher.convertSelection( docSelection, writer );
+					dispatcher.convertSelection( docSelection, model.markers, writer );
 				} );
 				expect( viewSelection.isFake ).to.be.false;
 			} );
@@ -594,7 +594,7 @@ describe( 'downcast-selection-converters', () => {
 		// Convert model to view.
 		view.change( writer => {
 			dispatcher.convertInsert( ModelRange.createIn( modelRoot ), writer );
-			dispatcher.convertSelection( docSelection, writer );
+			dispatcher.convertSelection( docSelection, model.markers, writer );
 		} );
 
 		// Stringify view and check if it is same as expected.

+ 11 - 11
packages/ckeditor5-engine/tests/conversion/downcastdispatcher.js

@@ -20,7 +20,7 @@ describe( 'DowncastDispatcher', () => {
 		model = new Model();
 		view = new View();
 		doc = model.document;
-		dispatcher = new DowncastDispatcher( model );
+		dispatcher = new DowncastDispatcher();
 		root = doc.createRoot();
 
 		differStub = {
@@ -33,7 +33,7 @@ describe( 'DowncastDispatcher', () => {
 	describe( 'constructor()', () => {
 		it( 'should create DowncastDispatcher with given api', () => {
 			const apiObj = {};
-			const dispatcher = new DowncastDispatcher( model, { apiObj } );
+			const dispatcher = new DowncastDispatcher( { apiObj } );
 
 			expect( dispatcher.conversionApi.apiObj ).to.equal( apiObj );
 		} );
@@ -264,7 +264,7 @@ describe( 'DowncastDispatcher', () => {
 		it( 'should fire selection event', () => {
 			sinon.spy( dispatcher, 'fire' );
 
-			dispatcher.convertSelection( doc.selection, [] );
+			dispatcher.convertSelection( doc.selection, model.markers, [] );
 
 			expect( dispatcher.fire.calledWith(
 				'selection',
@@ -284,7 +284,7 @@ describe( 'DowncastDispatcher', () => {
 				expect( consumable.test( data.selection, 'attribute:italic' ) ).to.be.null;
 			} );
 
-			dispatcher.convertSelection( doc.selection, [] );
+			dispatcher.convertSelection( doc.selection, model.markers, [] );
 		} );
 
 		it( 'should not fire attributes events for non-collapsed selection', () => {
@@ -295,7 +295,7 @@ describe( 'DowncastDispatcher', () => {
 
 			sinon.spy( dispatcher, 'fire' );
 
-			dispatcher.convertSelection( doc.selection, [] );
+			dispatcher.convertSelection( doc.selection, model.markers, [] );
 
 			expect( dispatcher.fire.calledWith( 'attribute:bold' ) ).to.be.false;
 			expect( dispatcher.fire.calledWith( 'attribute:italic' ) ).to.be.false;
@@ -314,7 +314,7 @@ describe( 'DowncastDispatcher', () => {
 
 			sinon.spy( dispatcher, 'fire' );
 
-			dispatcher.convertSelection( doc.selection, [] );
+			dispatcher.convertSelection( doc.selection, model.markers, [] );
 
 			expect( dispatcher.fire.calledWith( 'attribute:bold' ) ).to.be.true;
 		} );
@@ -337,7 +337,7 @@ describe( 'DowncastDispatcher', () => {
 
 			sinon.spy( dispatcher, 'fire' );
 
-			dispatcher.convertSelection( doc.selection, [] );
+			dispatcher.convertSelection( doc.selection, model.markers, [] );
 
 			expect( dispatcher.fire.calledWith( 'attribute:bold' ) ).to.be.false;
 		} );
@@ -353,7 +353,7 @@ describe( 'DowncastDispatcher', () => {
 			sinon.spy( dispatcher, 'fire' );
 
 			const markers = Array.from( model.markers.getMarkersAtPosition( doc.selection.getFirstPosition() ) );
-			dispatcher.convertSelection( doc.selection, markers );
+			dispatcher.convertSelection( doc.selection, model.markers, markers );
 
 			expect( dispatcher.fire.calledWith( 'addMarker:name' ) ).to.be.true;
 		} );
@@ -366,7 +366,7 @@ describe( 'DowncastDispatcher', () => {
 			sinon.spy( dispatcher, 'fire' );
 
 			const markers = Array.from( model.markers.getMarkersAtPosition( doc.selection.getFirstPosition() ) );
-			dispatcher.convertSelection( doc.selection, markers );
+			dispatcher.convertSelection( doc.selection, model.markers, markers );
 
 			expect( dispatcher.fire.calledWith( 'addMarker:name' ) ).to.be.false;
 		} );
@@ -407,7 +407,7 @@ describe( 'DowncastDispatcher', () => {
 
 			const markers = Array.from( model.markers.getMarkersAtPosition( doc.selection.getFirstPosition() ) );
 
-			dispatcher.convertSelection( doc.selection, markers );
+			dispatcher.convertSelection( doc.selection, model.markers, markers );
 
 			expect( dispatcher.fire.calledWith( 'addMarker:name' ) ).to.be.false;
 		} );
@@ -428,7 +428,7 @@ describe( 'DowncastDispatcher', () => {
 			} );
 
 			const markers = Array.from( model.markers.getMarkersAtPosition( doc.selection.getFirstPosition() ) );
-			dispatcher.convertSelection( doc.selection, markers );
+			dispatcher.convertSelection( doc.selection, model.markers, markers );
 
 			expect( dispatcher.fire.calledWith( 'addMarker:foo' ) ).to.be.true;
 			expect( dispatcher.fire.calledWith( 'addMarker:bar' ) ).to.be.false;