Skip to content
This repository was archived by the owner on Jun 26, 2020. It is now read-only.

Commit e6c5bcf

Browse files
authored
Merge pull request #1118 from ckeditor/t/1117
Fix: `AttributeElement`s created by selection conversion were not merged with `AttributeElement`s created by markers conversion. Closes #1117.
2 parents b71adfb + cd7ab62 commit e6c5bcf

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

src/conversion/model-selection-to-view-converters.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,10 @@ export function convertSelectionMarker( highlightDescriptor ) {
176176
return;
177177
}
178178

179+
if ( !descriptor.id ) {
180+
descriptor.id = data.markerName;
181+
}
182+
179183
const viewElement = createViewElementFromHighlightDescriptor( descriptor );
180184
const consumableName = 'selectionMarker:' + data.markerName;
181185

tests/conversion/model-selection-to-view-converters.js

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,8 @@ import {
3636
import { stringify as stringifyView } from '../../src/dev-utils/view';
3737
import { setData as setModelData } from '../../src/dev-utils/model';
3838

39-
const highlightDescriptor = { class: 'marker', priority: 1 };
40-
4139
describe( 'model-selection-to-view-converters', () => {
42-
let dispatcher, mapper, modelDoc, modelRoot, modelSelection, viewDoc, viewRoot, viewSelection;
40+
let dispatcher, mapper, modelDoc, modelRoot, modelSelection, viewDoc, viewRoot, viewSelection, highlightDescriptor;
4341

4442
beforeEach( () => {
4543
modelDoc = new ModelDocument();
@@ -55,6 +53,8 @@ describe( 'model-selection-to-view-converters', () => {
5553
mapper = new Mapper();
5654
mapper.bindElements( modelRoot, viewRoot );
5755

56+
highlightDescriptor = { class: 'marker', priority: 1 };
57+
5858
dispatcher = new ModelConversionDispatcher( modelDoc, { mapper, viewSelection } );
5959

6060
dispatcher.on( 'insert:$text', insertText() );
@@ -293,6 +293,30 @@ describe( 'model-selection-to-view-converters', () => {
293293
.to.equal( '<div>foo<span class="marker2">[]</span>bar</div>' );
294294
} );
295295

296+
it( 'in marker - should merge with the rest of attribute elements', () => {
297+
dispatcher.on( 'addMarker:marker2', highlightText( data => ( { 'class': data.markerName } ) ) );
298+
dispatcher.on( 'selectionMarker:marker2', convertSelectionMarker( data => ( { 'class': data.markerName } ) ) );
299+
300+
setModelData( modelDoc, 'foobar' );
301+
const marker = modelDoc.markers.set( 'marker2', ModelRange.createFromParentsAndOffsets( modelRoot, 1, modelRoot, 5 ) );
302+
303+
modelSelection.setRanges( [ new ModelRange( ModelPosition.createAt( modelRoot, 3 ) ) ] );
304+
305+
// Remove view children manually (without firing additional conversion).
306+
viewRoot.removeChildren( 0, viewRoot.childCount );
307+
308+
// Convert model to view.
309+
dispatcher.convertInsertion( ModelRange.createIn( modelRoot ) );
310+
dispatcher.convertMarker( 'addMarker', marker.name, marker.getRange() );
311+
312+
const markers = Array.from( modelDoc.markers.getMarkersAtPosition( modelSelection.getFirstPosition() ) );
313+
dispatcher.convertSelection( modelSelection, markers );
314+
315+
// Stringify view and check if it is same as expected.
316+
expect( stringifyView( viewRoot, viewSelection, { showType: false } ) )
317+
.to.equal( '<div>f<span class="marker2">oo{}ba</span>r</div>' );
318+
} );
319+
296320
it( 'should do nothing if creator return null', () => {
297321
dispatcher.on( 'selectionMarker:marker3', convertSelectionMarker( () => {
298322

0 commit comments

Comments
 (0)