Преглед изворни кода

DataController and EditableController.

Piotr Jasiun пре 9 година
родитељ
комит
8161e5287f

+ 37 - 2
packages/ckeditor5-engine/src/treecontroller/datacontroller.js

@@ -8,8 +8,43 @@
 export default class DataController {
 	constructor( modelDocument, dataProcessor ) {
 		this.model = modelDocument;
-		this.processor = dataProcessor;
+
+		this.mapper = new Mapper();
+		this.writer = new Writer();
+
+		this.toView = new ModelConversionDispatcher( {
+			writer: this.writer,
+			mapper: this.mapper
+		} );
+
+		this.domConverter = new DomConverter();
+		this.dataProcessor = dataProcessor;
+
+		toView.on( 'insert:text', insertText() );
 	}
 
-	destroy() {}
+	getData( rootName ) {
+		// Get model range
+		const modelRootElement = this.model.getRoot( rootName );
+		const modelRange = ModelRange.createFromElement( rootElement );
+
+		// model -> view
+		const viewElement = new ViewElement(); // ViewDocumentFragment?
+		this.mapper.bindElements( modelRootElement, viewElement );
+
+		this.toView.convertInsert( modelRange );
+
+		this.mapper.unbindElements( modelRootElement, viewElement );
+
+		// view -> DOM
+		const domElement = domConverter.viewToDom( viewElement, document ); // TODO new document
+
+		domDocumentFragment = domElement; // TODO
+
+		// DOM -> data
+		return dataProcessor.toData( domDocumentFragment );
+	}
+
+	setData( data, rootName ) {
+	}
 }

+ 35 - 0
packages/ckeditor5-engine/src/treecontroller/editablecontroller.js

@@ -0,0 +1,35 @@
+/**
+ * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+
+'use strict';
+
+export default class EditableController {
+	constructor( modelDocument ) {
+		this.model = modelDocument;
+
+		this.mapper = new Mapper();
+		this.view = new TreeView();
+
+		this.toView = new ModelConversionDispatcher( {
+			writer: this.view.writer,
+			mapper: this.mapper
+		} );
+
+		this.model.on( 'change', ( evt, type, changeInfo ) => {
+			this.toView.convertChange( type, changeInfo );
+		} );
+
+		toView.on( 'insert:text', insertText() );
+		toView.on( 'remove', remove() );
+		toView.on( 'move', move() );
+	}
+
+	createRoot( element, name ) {
+		const viewRoot = this.view.createRoot( element, name );
+		const modelRoot = this.model.createRoot( name );
+
+		this.mapper.bindElements( modelRoot, viewRoot );
+	}
+}