浏览代码

Fix: Removing highlight on text crashed when marker range was empty-ish.

Szymon Cofalik 7 年之前
父节点
当前提交
cbc941bda4

+ 5 - 0
packages/ckeditor5-engine/src/conversion/downcast-converters.js

@@ -916,6 +916,11 @@ export function removeHighlight( highlightDescriptor ) {
 
 		// Get all elements bound with given marker name.
 		const elements = conversionApi.mapper.markerNameToElements( data.markerName );
+
+		if ( !elements ) {
+			return;
+		}
+
 		conversionApi.mapper.unbindElementsFromMarkerName( data.markerName );
 
 		for ( const element of elements ) {

+ 22 - 0
packages/ckeditor5-engine/tests/conversion/downcast-converters.js

@@ -1392,6 +1392,28 @@ describe( 'downcast-converters', () => {
 
 				expect( viewToString( viewRoot ) ).to.equal( '<div><p>foo</p><p>bar</p></div>' );
 			} );
+
+			it( 'should do nothing if marker is applied and removed on empty-ish range', () => {
+				dispatcher.on( 'addMarker:marker', highlightText( highlightDescriptor ) );
+				dispatcher.on( 'removeMarker:marker', removeHighlight( highlightDescriptor ) );
+
+				const p1 = modelRoot.getChild( 0 );
+				const p2 = modelRoot.getChild( 1 );
+
+				const markerRange = ModelRange.createFromParentsAndOffsets( p1, 3, p2, 0 );
+
+				model.change( writer => {
+					writer.setMarker( 'marker', markerRange );
+				} );
+
+				expect( viewToString( viewRoot ) ).to.equal( '<div><p>foo</p><p>bar</p></div>' );
+
+				model.change( writer => {
+					writer.removeMarker( 'marker', markerRange );
+				} );
+
+				expect( viewToString( viewRoot ) ).to.equal( '<div><p>foo</p><p>bar</p></div>' );
+			} );
 		} );
 
 		describe( 'on element', () => {