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

Fix in convertElementsInsideMarker - element is consumed too early, before all checks passed. Minor doc fix.

Szymon Kupś пре 8 година
родитељ
комит
ef14eaf663
1 измењених фајлова са 8 додато и 3 уклоњено
  1. 8 3
      packages/ckeditor5-engine/src/conversion/model-to-view-converters.js

+ 8 - 3
packages/ckeditor5-engine/src/conversion/model-to-view-converters.js

@@ -442,11 +442,13 @@ export function convertTextsInsideMarker( selectionDescriptor ) {
 /**
  * Function factory, creates converter that converts all elements inside marker's range. Converter checks if element has
  * functions stored under `setVirtualSelection` and `removeVirtualSelection` custom properties and calls them passing
- * {@link module:engine/conversion/buildmodelconverter~VirtualSelectionDescriptor. In such case converter will consume
+ * {@link module:engine/conversion/buildmodelconverter~VirtualSelectionDescriptor}. In such case converter will consume
  * all element's children, assuming that they were handled by element itself. If selection descriptor will not provide
  * priority, priority 10 will be used as default, to be compliant with
  * {@link module:engine/conversion/model-to-view-converters~convertTextsInsideMarker} method which uses default priority of
  * {@link module:engine/view/attributeelement~AttributeElement}.
+ * When `setVirtualSelection` and `removeVirtualSelection` custom properties are not present, element is not converted
+ * in any special way. This means that converters will proceed to convert element's child nodes.
  *
  * @param {module:engine/conversion/buildmodelconverter~VirtualSelectionDescriptor|Function} selectionDescriptor
  * @return {Function}
@@ -463,7 +465,7 @@ export function convertElementsInsideMarker( selectionDescriptor ) {
 			return;
 		}
 
-		if ( !consumable.consume( data.item, evt.name ) ) {
+		if ( !consumable.test( data.item, evt.name ) ) {
 			return;
 		}
 
@@ -476,7 +478,10 @@ export function convertElementsInsideMarker( selectionDescriptor ) {
 		const selectionHandlingMethod = addMarker ? 'setVirtualSelection' : 'removeVirtualSelection';
 
 		if ( viewElement && viewElement.getCustomProperty( selectionHandlingMethod ) ) {
-			// Virtual selection will be handled by parent element - consume all children.
+			// Consume element itself.
+			consumable.consume( data.item, evt.name );
+
+			// Consume all children nodes.
 			for ( const value of ModelRange.createIn( modelItem ) ) {
 				consumable.consume( value.item, evt.name );
 			}