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

Commit d289b74

Browse files
authored
Merge pull request #1536 from ckeditor/t/1521
Other: Swapped parameters order in the `DowncastWriter#rename()` method. The `DowncastWriter#remove()` method now accepts range or item. Closes #1521. BREAKING CHANGE: Swapped parameters order in the `DowncastWriter` (former `engine\view\writer`) `rename()` method. See #1521.
2 parents 9ae03d6 + e50028e commit d289b74

File tree

3 files changed

+64
-9
lines changed

3 files changed

+64
-9
lines changed

src/view/downcastwriter.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -651,11 +651,14 @@ export default class DowncastWriter {
651651
* {@link module:engine/view/range~Range#start start} and {@link module:engine/view/range~Range#end end} positions are not placed inside
652652
* same parent container.
653653
*
654-
* @param {module:engine/view/range~Range} range Range to remove from container. After removing, it will be updated
654+
* @param {module:engine/view/range~Range|module:engine/view/item~Item} rangeOrItem Range to remove from container
655+
* or an {@link module:engine/view/item~Item item} to remove. If range is provided, after removing, it will be updated
655656
* to a collapsed range showing the new position.
656657
* @returns {module:engine/view/documentfragment~DocumentFragment} Document fragment containing removed nodes.
657658
*/
658-
remove( range ) {
659+
remove( rangeOrItem ) {
660+
const range = rangeOrItem instanceof Range ? rangeOrItem : Range.createOn( rangeOrItem );
661+
659662
validateRangeContainer( range );
660663

661664
// If range is collapsed - nothing to remove.
@@ -905,10 +908,10 @@ export default class DowncastWriter {
905908
*
906909
* Since this function creates a new element and removes the given one, the new element is returned to keep reference.
907910
*
908-
* @param {module:engine/view/containerelement~ContainerElement} viewElement Element to be renamed.
909911
* @param {String} newName New name for element.
912+
* @param {module:engine/view/containerelement~ContainerElement} viewElement Element to be renamed.
910913
*/
911-
rename( viewElement, newName ) {
914+
rename( newName, viewElement ) {
912915
const newElement = new ContainerElement( newName, viewElement.getAttributes() );
913916

914917
this.insert( Position.createAfter( viewElement ), newElement );

tests/view/downcastwriter/remove.js

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,15 @@ describe( 'DowncastWriter', () => {
2424
// @param {String} input
2525
// @param {String} expectedResult
2626
// @param {String} expectedRemoved
27-
function test( input, expectedResult, expectedRemoved ) {
27+
// @param {Boolean} asItem
28+
function test( input, expectedResult, expectedRemoved, asItem = false ) {
2829
const { view, selection } = parse( input );
2930

3031
const range = selection.getFirstRange();
31-
const removed = writer.remove( range );
32-
expect( stringify( view, range, { showType: true, showPriority: true } ) ).to.equal( expectedResult );
32+
const rangeOrItem = asItem ? Array.from( range.getItems() )[ 0 ] : range;
33+
const removed = writer.remove( rangeOrItem );
34+
35+
expect( stringify( view, asItem ? null : range, { showType: true, showPriority: true } ) ).to.equal( expectedResult );
3336
expect( stringify( removed, null, { showType: true, showPriority: true } ) ).to.equal( expectedRemoved );
3437
}
3538

@@ -153,5 +156,54 @@ describe( 'DowncastWriter', () => {
153156
writer.remove( range );
154157
} ).to.throw( CKEditorError, 'view-writer-cannot-break-ui-element' );
155158
} );
159+
160+
it( 'should remove single text node (as item)', () => {
161+
test( '<container:p>[foobar]</container:p>', '<container:p></container:p>', 'foobar', true );
162+
} );
163+
164+
it( 'should not leave empty text nodes (as item)', () => {
165+
test( '<container:p>{foobar}</container:p>', '<container:p></container:p>', 'foobar', true );
166+
} );
167+
168+
it( 'should remove part of the text node (as item)', () => {
169+
test( '<container:p>f{oob}ar</container:p>', '<container:p>far</container:p>', 'oob', true );
170+
} );
171+
172+
it( 'should merge after removing (as item)', () => {
173+
test(
174+
'<container:p>' +
175+
'<attribute:b view-priority="1">foo</attribute:b>[bar]<attribute:b view-priority="1">bazqux</attribute:b>' +
176+
'</container:p>',
177+
'<container:p><attribute:b view-priority="1">foobazqux</attribute:b></container:p>',
178+
'bar',
179+
true
180+
);
181+
} );
182+
183+
it( 'should remove EmptyElement (as item)', () => {
184+
test(
185+
'<container:p>foo[<empty:img></empty:img>]bar</container:p>',
186+
'<container:p>foobar</container:p>',
187+
'<empty:img></empty:img>',
188+
true
189+
);
190+
} );
191+
192+
it( 'should remove UIElement (as item)', () => {
193+
test(
194+
'<container:p>foo[<ui:span></ui:span>]bar</container:p>',
195+
'<container:p>foobar</container:p>',
196+
'<ui:span></ui:span>',
197+
true
198+
);
199+
} );
200+
201+
it( 'should throw when item has no parent container', () => {
202+
const el = new AttributeElement( 'b' );
203+
204+
expect( () => {
205+
writer.remove( el );
206+
} ).to.throw( CKEditorError, 'view-position-before-root' );
207+
} );
156208
} );
157209
} );

tests/view/downcastwriter/rename.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ describe( 'DowncastWriter', () => {
2424
it( 'should rename given element by inserting a new element in the place of the old one', () => {
2525
const text = foo.getChild( 0 );
2626

27-
writer.rename( foo, 'bar' );
27+
writer.rename( 'bar', foo );
2828

2929
const bar = root.getChild( 0 );
3030

@@ -35,7 +35,7 @@ describe( 'DowncastWriter', () => {
3535
} );
3636

3737
it( 'should return a reference to the inserted element', () => {
38-
const bar = writer.rename( foo, 'bar' );
38+
const bar = writer.rename( 'bar', foo );
3939

4040
expect( bar ).to.equal( root.getChild( 0 ) );
4141
} );

0 commit comments

Comments
 (0)