Parcourir la source

View to model position mapping.

Piotr Jasiun il y a 9 ans
Parent
commit
377f2a14f6
1 fichiers modifiés avec 18 ajouts et 8 suppressions
  1. 18 8
      packages/ckeditor5-engine/src/editingcontroller.js

+ 18 - 8
packages/ckeditor5-engine/src/editingcontroller.js

@@ -30,24 +30,34 @@ import {
 import EmitterMixin from '../utils/emittermixin.js';
 
 export default class EditingController {
-	constructor( modelDocument ) {
+	constructor( model ) {
 		this._listenters = Object.create( EmitterMixin );
 
-		this.model = modelDocument;
+		this.model = model;
 
-		this.view = new ViewDocument();
+		const view = new ViewDocument();
+		this.view = view;
 
 		this.view.addObserver( MutationObserver );
 		this.view.addObserver( SelectionObserver );
 		this.view.addObserver( FocusObserver );
 		this.view.addObserver( KeyObserver );
 
+		this.mapper = new Mapper();
+
 		// Move selection change to model
-		// this._listenters.listenTo( this.view, 'selectionChange', ( evt, data ) => {
-		// 	data.newSelection.getRanges();
-		// } );
+		this._listenters.listenTo( this.view, 'selectionChange', ( evt, data ) => {
+			model.enqueueChanges( () => {
+				const viewSelection = data.newSelection;
 
-		this.mapper = new Mapper();
+				model.selection.removeAllRanges();
+
+				for ( let viewRange of viewSelection.getRanges() ) {
+					const modelRange = this.mapper.toModelRange( viewRange );
+					model.selection.addRange( modelRange, viewSelection.isBackward );
+				}
+			} );
+		} );
 
 		this.modelToView = new ModelConversionDispatcher( {
 			writer: this.view.writer,
@@ -60,7 +70,7 @@ export default class EditingController {
 		} );
 
 		this._listenters.listenTo( this.model, 'changesDone', () => {
-			this.modelToView.convertSelection( this.model.selection );
+			this.modelToView.convertSelection( model.selection );
 			this.view.render();
 		} );