8
0
Pārlūkot izejas kodu

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ś 9 gadi atpakaļ
vecāks
revīzija
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 );
-		} );
-	} );
 } );