Parcourir la source

Trigger conversion on adding a slot with new content.

Maciej Gołaszewski il y a 5 ans
Parent
commit
1b65b1ad21

+ 15 - 1
packages/ckeditor5-engine/src/conversion/downcastdispatcher.js

@@ -350,7 +350,21 @@ export default class DowncastDispatcher {
 			if ( this._refreshEventMap.has( expectedEventName ) ) {
 			if ( this._refreshEventMap.has( expectedEventName ) ) {
 				// @if CK_DEBUG // console.log( '  >> skip', expectedEventName );
 				// @if CK_DEBUG // console.log( '  >> skip', expectedEventName );
 			} else {
 			} else {
-				// @if CK_DEBUG // console.log( '  >> check further', expectedEventName );
+				// The below check if every node was converted before - if not it triggers the conversion again.
+				// Below optimal solution - todo refactor or introduce inner API for that.
+				if ( value.type === 'text' ) {
+					const mappedPosition = this.conversionApi.mapper.toViewPosition( itemRange.start );
+
+					if ( !mappedPosition.parent.is( '$text' ) ) {
+						this._testAndFire( 'insert', data );
+					}
+				} else {
+					const viewElement = this.conversionApi.mapper.toViewElement( item );
+					// @if CK_DEBUG // console.log( '  >> check further', expectedEventName, !!viewElement );
+					if ( !viewElement ) {
+						this._testAndFire( 'insert', data );
+					}
+				}
 			}
 			}
 		}
 		}
 
 

+ 3 - 1
packages/ckeditor5-engine/src/conversion/downcasthelpers.js

@@ -830,7 +830,9 @@ export function insertElement( elementCreator ) {
 			}
 			}
 
 
 			// At this stage old view can be safely removed.
 			// At this stage old view can be safely removed.
-			conversionApi.writer.remove( currentView );
+			if ( currentView ) {
+				conversionApi.writer.remove( currentView );
+			}
 		}
 		}
 
 
 		// Rest of standard insertElement converter.
 		// Rest of standard insertElement converter.