Kaynağa Gözat

Remove Conversion#register() method.

Maciej Gołaszewski 6 yıl önce
ebeveyn
işleme
43169a1c67

+ 43 - 17
packages/ckeditor5-engine/src/conversion/conversion.js

@@ -8,6 +8,8 @@
  */
 
 import CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';
+import UpcastHelpers from './upcasthelpers';
+import DowncastHelpers from './downcasthelpers';
 
 /**
  * A utility class that helps add converters to upcast and downcast dispatchers.
@@ -57,37 +59,59 @@ export default class Conversion {
 	/**
 	 * Creates a new conversion instance.
 	 */
-	constructor() {
+	constructor( downcastDispatchers, upcastDispatchers ) {
 		/**
 		 * @private
 		 * @member {Map}
 		 */
-		this._conversionHelpers = new Map();
+		this._helpers = new Map();
+		this._groups = new Map();
+
+		this._defineGroup( 'downcast', downcastDispatchers, DowncastHelpers );
+		this._defineGroup( 'upcast', upcastDispatchers, UpcastHelpers );
 	}
 
 	/**
-	 * Registers one or more converters under a given group name. The group name can then be used to assign a converter
-	 * to multiple dispatchers at once.
+	 * Define an alias for registered dispatcher.
+	 *
+	 *		const conversion = new Conversion( [ dataDowncastDispatcher, editingDowncastDispatcher ], upcastDispatcher );
 	 *
-	 * If a given group name is used for the second time, the
-	 * {@link module:utils/ckeditorerror~CKEditorError `conversion-register-group-exists` error} is thrown.
+	 *		conversion.addAlias( 'dataDowncast', dataDowncastDispatcher );
 	 *
-	 * @param {String} name The name for dispatchers group.
-	 * @param {module:engine/conversion/downcasthelpers~DowncastHelpers|
-	 * module:engine/conversion/upcasthelpers~UpcastHelpers} conversionHelpers
+	 * @param {String} alias An alias of a dispatcher.
+	 * @param {module:engine/conversion/downcastdispatcher~DowncastDispatcher|
+	 * module:engine/conversion/upcastdispatcher~UpcastDispatcher} dispatcher Dispatcher which should have an alias.
 	 */
-	register( name, conversionHelpers ) {
-		if ( this._conversionHelpers.has( name ) ) {
+	addAlias( alias, dispatcher ) {
+		const groupEntry = [ ...this._groups.entries() ].find( ( [ , dispatchers ] ) => dispatchers.includes( dispatcher ) );
+
+		const groupName = groupEntry ? groupEntry[ 0 ] : null;
+
+		const helper = this._helpers.get( groupName );
+
+		this._defineGroup( alias, dispatcher, helper );
+	}
+
+	_defineGroup( name, dispatcher, helpers ) {
+		if ( this._groups.has( name ) ) {
 			/**
 			 * Trying to register a group name that has already been registered.
 			 *
 			 * @error conversion-register-group-exists
 			 */
-			throw new CKEditorError( 'conversion-register-group-exists: Trying to register' +
-				'a group name that has already been registered.' );
+			throw new CKEditorError( 'conversion-group-exists: Trying to register a group name that has already been registered.' );
+		}
+
+		const group = [];
+
+		const dispatchers = Array.isArray( dispatcher ) ? dispatcher : [ dispatcher ];
+
+		for ( const dispatcher of dispatchers ) {
+			group.push( dispatcher );
 		}
 
-		this._conversionHelpers.set( name, conversionHelpers );
+		this._groups.set( name, group );
+		this._helpers.set( name, helpers );
 	}
 
 	/**
@@ -149,7 +173,9 @@ export default class Conversion {
 	 * @returns {module:engine/conversion/downcasthelpers~DowncastHelpers|module:engine/conversion/upcasthelpers~UpcastHelpers}
 	 */
 	for( groupName ) {
-		return this._getConversionHelpers( groupName );
+		const ConversionHelper = this._getConversionHelpers( groupName );
+
+		return new ConversionHelper( this._groups.get( groupName ) );
 	}
 
 	/**
@@ -545,7 +571,7 @@ export default class Conversion {
 	 * @returns {module:engine/conversion/downcasthelpers~DowncastHelpers|module:engine/conversion/upcasthelpers~UpcastHelpers}
 	 */
 	_getConversionHelpers( groupName ) {
-		if ( !this._conversionHelpers.has( groupName ) ) {
+		if ( !this._helpers.has( groupName ) ) {
 			/**
 			 * Trying to add a converter to an unknown dispatchers group.
 			 *
@@ -554,7 +580,7 @@ export default class Conversion {
 			throw new CKEditorError( 'conversion-for-unknown-group: Trying to add a converter to an unknown dispatchers group.' );
 		}
 
-		return this._conversionHelpers.get( groupName );
+		return this._helpers.get( groupName );
 	}
 }
 

+ 53 - 0
packages/ckeditor5-engine/src/conversion/conversionhelpers.js

@@ -0,0 +1,53 @@
+/**
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+
+/**
+ * @module engine/conversion/conversionhelpers
+ */
+
+/**
+ * Base class for conversion helpers.
+ */
+export default class ConversionHelpers {
+	/**
+	 * Creates a conversion helpers instance.
+	 *
+	 * @param {Array.<module:engine/conversion/downcastdispatcher~DowncastDispatcher|
+	 * module:engine/conversion/upcastdispatcher~UpcastDispatcher>} dispatcher
+	 */
+	constructor( dispatcher ) {
+		this._dispatchers = Array.isArray( dispatcher ) ? dispatcher : [ dispatcher ];
+	}
+
+	/**
+	 * Registers a conversion helper.
+	 *
+	 * **Note**: See full usage example in the `{@link module:engine/conversion/conversion~Conversion#for conversion.for()}`
+	 * method description.
+	 *
+	 * @param {Function} conversionHelper The function to be called on event.
+	 * @returns {module:engine/conversion/downcasthelpers~DowncastHelpers|module:engine/conversion/upcasthelpers~UpcastHelpers}
+	 */
+	add( conversionHelper ) {
+		this._addToDispatchers( conversionHelper );
+
+		return this;
+	}
+
+	/**
+	 * Helper function for the `Conversion` `.add()` method.
+	 *
+	 * Calls `conversionHelper` on each dispatcher from the group specified earlier in the `.for()` call, effectively
+	 * adding converters to all specified dispatchers.
+	 *
+	 * @private
+	 * @param {Function} conversionHelper
+	 */
+	_addToDispatchers( conversionHelper ) {
+		for ( const dispatcher of this._dispatchers ) {
+			conversionHelper( dispatcher );
+		}
+	}
+}