Explorar el Código

Changed the responsibilities of DataProcessor.
Now it converts data to view and back. DomConverter is used internally and it is no longer needed inside DataController.

Szymon Kupś hace 9 años
padre
commit
e7294516db

+ 4 - 20
packages/ckeditor5-engine/src/datacontroller.js

@@ -12,8 +12,6 @@ import ViewConversionDispatcher from './conversion/viewconversiondispatcher.js';
 import { convertText, convertToModelFragment } from './conversion/view-to-model-converters.js';
 
 import ViewDocumentFragment from './view/documentfragment.js';
-import DomConverter from './view/domconverter.js';
-import { NBSP_FILLER } from './view/filler.js';
 
 import ModelRange from './model/range.js';
 import ModelPosition from './model/position.js';
@@ -65,14 +63,6 @@ export default class DataController {
 		this._mapper = new Mapper();
 
 		/**
-		 * DOM converter used during the conversion.
-		 *
-		 * @private
-		 * @member {engine.view.DomConverter} engine.DataController#_domConverter
-		 */
-		this._domConverter = new DomConverter( { blockFiller: NBSP_FILLER } );
-
-		/**
 		 * Model to view conversion dispatcher used by the {@link engine.DataController#get get method}.
 		 * To attach model to view converter to the data pipeline you need to add lister to this property:
 		 *
@@ -137,11 +127,8 @@ export default class DataController {
 
 		this._mapper.clearBindings();
 
-		// view -> DOM.
-		const domDocumentFragment = this._domConverter.viewToDom( viewDocumentFragment, document );
-
-		// DOM -> data.
-		return this.processor.toData( domDocumentFragment );
+		// view -> data.
+		return this.processor.toData( viewDocumentFragment );
 	}
 
 	/**
@@ -175,11 +162,8 @@ export default class DataController {
 	 * @returns {engine.model.DocumentFragment} Parsed data.
 	 */
 	parse( data ) {
-		// data -> DOM.
-		const domDocumentFragment = this.processor.toDom( data );
-
-		// DOM -> view.
-		const viewDocumentFragment = this._domConverter.domToView( domDocumentFragment );
+		// data -> view.
+		const viewDocumentFragment = this.processor.toView( data );
 
 		// view -> model.
 		const modelDocumentFragment = this.viewToModel.convert( viewDocumentFragment, { context: [ '$root' ] } );

+ 20 - 4
packages/ckeditor5-engine/src/dataprocessor/htmldataprocessor.js

@@ -4,6 +4,8 @@
  */
 
 import BasicHtmlWriter from './basichtmlwriter.js';
+import DomConverter from '../view/domconverter.js';
+import { NBSP_FILLER } from '../view/filler.js';
 
 /**
  * HtmlDataProcessor class.
@@ -25,6 +27,8 @@ export default class HtmlDataProcessor {
 		 */
 		this._domParser = new DOMParser();
 
+		this._domConverter = new DomConverter( { blockFiller: NBSP_FILLER } );
+
 		/**
 		 * BasicHtmlWriter instance used to convert DOM elements to HTML string.
 		 *
@@ -35,13 +39,25 @@ export default class HtmlDataProcessor {
 	}
 
 	/**
-	 * Converts provided document fragment to data format - in this case HTML string.
+	 * Converts provided view document fragment to data format - in this case HTML string.
 	 *
-	 * @param {DocumentFragment} fragment
+	 * @param {engine.view.DocumentFragment} fragment
 	 * @returns {String}
 	 */
-	toData( fragment ) {
-		return this._htmlWriter.getHtml( fragment );
+	toData( viewFragment ) {
+		// Convert view DocumentFragment to DOM DocumentFragment.
+		const domFragment = this._domConverter.viewToDom( viewFragment, document );
+
+		// Convert DOM DocumentFragment to HTML output.
+		return this._htmlWriter.getHtml( domFragment );
+	}
+
+	toView( data ) {
+		// Convert input HTML data to DOM DocumentFragment.
+		const domFragment = this.toDom( data );
+
+		// Convert DOM DocumentFragment to view DocumentFragment.
+		return this._domConverter.domToView( domFragment );
 	}
 
 	/**

+ 0 - 14
packages/ckeditor5-engine/tests/dataprocessor/htmldataprocessor.js

@@ -67,18 +67,4 @@ describe( 'HtmlDataProcessor', () => {
 			} );
 		}
 	} );
-
-	describe( 'toData', () => {
-		it( 'should use HtmlWriter', () => {
-			const spy = sinon.spy( dataProcessor._htmlWriter, 'getHtml' );
-
-			const fragment = document.createDocumentFragment();
-			const paragraph = document.createElement( 'p' );
-			fragment.appendChild( paragraph );
-			dataProcessor.toData( fragment );
-
-			spy.restore();
-			sinon.assert.calledWithExactly( spy, fragment );
-		} );
-	} );
 } );