Browse Source

Fix for skipped actions in 'actions replace diff'.

Krzysztof Krztoń 7 years ago
parent
commit
d03beb2cac
1 changed files with 6 additions and 0 deletions
  1. 6 0
      packages/ckeditor5-engine/src/view/renderer.js

+ 6 - 0
packages/ckeditor5-engine/src/view/renderer.js

@@ -697,21 +697,27 @@ export default class Renderer {
 		}
 
 		let newActions = [];
+		let skipActions = [];
 		let actualSlice = [];
 		let expectedSlice = [];
 
 		const counter = { equal: 0, insert: 0, delete: 0 };
 		for ( const action of actions ) {
 			if ( action === 'insert' ) {
+				skipActions.push( 'insert' );
 				expectedSlice.push( expectedDom[ counter.equal + counter.insert ] );
 			} else if ( action === 'delete' ) {
+				skipActions.push( 'delete' );
 				actualSlice.push( actualDom[ counter.equal + counter.delete ] );
 			} else { // equal
 				if ( expectedSlice.length && actualSlice.length ) {
 					newActions = newActions.concat( calculateReplaceActions( actualSlice, expectedSlice ) );
+				} else if ( expectedSlice.length || actualSlice.length ) {
+					newActions = newActions.concat( skipActions );
 				}
 				newActions.push( 'equal' );
 				// Reset stored elements on 'equal'.
+				skipActions = [];
 				actualSlice = [];
 				expectedSlice = [];
 			}