8
0
Piotr Jasiun 9 лет назад
Родитель
Сommit
49a4062280

+ 2 - 1
packages/ckeditor5-engine/src/treecontroller/model-to-view-converters.js

@@ -14,6 +14,7 @@ export function insert( nodeCreator ) {
 
 		const viewPosition = context.mapper.toViewPosition( model.range.start );
 
+		// TODO: copy element
 		const viewNode = ( nodeCreator instanceof viewNode ) ? nodeCreator : nodeCreator( model, context );
 
 		context.mapper.bind( model.item, viewNode );
@@ -93,7 +94,7 @@ export function removeAttribute( attributesCreator ) {
 	};
 }
 
-export function wrap( nodeCreator ) {
+export function wrap( nodeCreator ) { // TODO: priority
 	return ( evt, model, context ) => {
 		model.consumable.consume( model.item, eventNameToConsumableType( evt.name ) );
 

+ 2 - 0
packages/ckeditor5-engine/src/treecontroller/modelconversiondispatcher.js

@@ -8,6 +8,8 @@
 import Consumable from './modelconsumable.js';
 import TextFragment from '../treemodel/textfragment.js';
 
+// TODO: Add docs that if listener is called it means that element is consumable, so every listener need to stop the event if
+// it was consumed.
 export default class ModelConversionDispatcher {
 	constructor( controller ) {
 		this.controller = controller;

+ 2 - 2
packages/ckeditor5-engine/src/treecontroller/view-to-model-converters.js

@@ -9,7 +9,7 @@ import ModelDocumentFragment from '../treemodel/documentfragment.js';
 import ModelText from '../treemodel/text.js';
 
 export function convertChildren() {
-	return ( data, controller ) => {
+	return ( evt, data, controller ) => {
 		if ( !data.output && controller.consumable.test( data.input ) ) {
 			data.output = new ModelDocumentFragment( controller.convertChildren( data.input, data.context ) );
 		}
@@ -17,7 +17,7 @@ export function convertChildren() {
 }
 
 export function convertText() {
-	return ( data, controller ) => {
+	return ( evt, data, controller ) => {
 		if ( controller.consumable.consume( data.input ) ) {
 			data.output = new ModelText( data.input.data );
 		}

+ 2 - 1
packages/ckeditor5-engine/src/treecontroller/viewconversioncontroller.js

@@ -34,6 +34,7 @@ export default class ViewConversionController {
 	}
 
 	convertChildren( input, context ) {
-		return Array.from( input.getChildren() ).map( viewChild => this.convert( viewChild, context ) );
+		// TODO: flatten array (single convert may return multiple elements as an array.
+		return Array.from( input.getChildren() ).map( ( viewChild ) => this.convert( viewChild, context ) );
 	}
 }

+ 8 - 4
packages/ckeditor5-engine/src/treecontroller/viewconversiondispatcher.js

@@ -22,7 +22,7 @@ import utils from '../../utils/utils.js';
  *			if ( controller.schema.checkQuery( schemaQuery ) ) {
  *				if ( !controller.consumable.consume( data.input, { name: true } ) ) {
  *					const context = data.context.concat( paragraph );
- *					const children = controller.convertToFragment( data.input, context );
+ *					const children = controller.convertChildren( data.input, context );
  *					paragraph.appendChildren( children );
  *					data.output = paragraph;
  *				}
@@ -31,6 +31,8 @@ import utils from '../../utils/utils.js';
  *
  *		coversionDispatcher.on( 'element:a', ( data, controller ) => {
  *			if ( controller.consumable.consume( data.input, { name: true, attributes: [ 'href' ] } ) ) {
+ *				data.output = controller.convertChildren( data.input, data.context );
+ *
  *				for ( let item of Range.createFrom( data.output ) ) {
  *					const schemaQuery = {
  *						name: item.name || '$text',
@@ -42,16 +44,18 @@ import utils from '../../utils/utils.js';
  *					}
  *				}
  *			}
- *		}
+ *		} );
  */
 
 export default class ViewConversionDispatcher {
 	convert( viewDocumentFragment ) {
+		this.fire( 'viewCleanup', viewDocumentFragment );
+
 		const consumable = Consumable.createFrom( viewDocumentFragment );
 
-		const conversionContext = new ConversionController( this, consumable );
+		const conversionController = new ConversionController( this, consumable );
 
-		return conversionContext.convert( viewDocumentFragment );
+		return conversionController.convert( viewDocumentFragment );
 	}
 }