Selaa lähdekoodia

Merge pull request #1659 from ckeditor/t/1658

Feature: Introduced `Differ#getChangedMarkers`. Closes #1658.
Piotr Jasiun 6 vuotta sitten
vanhempi
commit
e6c61ad746

+ 17 - 0
packages/ckeditor5-engine/src/model/differ.js

@@ -293,6 +293,23 @@ export default class Differ {
 	}
 
 	/**
+	 * Returns all markers which changed.
+	 *
+	 * @returns {Array.<Object>}
+	 */
+	getChangedMarkers() {
+		return Array.from( this._changedMarkers ).map( item => (
+			{
+				name: item[ 0 ],
+				data: {
+					oldRange: item[ 1 ].oldRange,
+					newRange: item[ 1 ].newRange
+				}
+			}
+		) );
+	}
+
+	/**
 	 * Checks whether some of the buffered changes affect the editor data.
 	 *
 	 * Types of changes which affect the editor data:

+ 73 - 0
packages/ckeditor5-engine/tests/model/differ.js

@@ -1403,6 +1403,16 @@ describe( 'Differ', () => {
 			expect( differ.getMarkersToAdd() ).to.deep.equal( [
 				{ name: 'name', range }
 			] );
+
+			expect( differ.getChangedMarkers() ).to.deep.equal( [
+				{
+					name: 'name',
+					data: {
+						oldRange: null,
+						newRange: range
+					}
+				}
+			] );
 		} );
 
 		it( 'remove marker', () => {
@@ -1413,6 +1423,16 @@ describe( 'Differ', () => {
 			] );
 
 			expect( differ.getMarkersToAdd() ).to.deep.equal( [] );
+
+			expect( differ.getChangedMarkers() ).to.deep.equal( [
+				{
+					name: 'name',
+					data: {
+						oldRange: range,
+						newRange: null
+					}
+				}
+			] );
 		} );
 
 		it( 'change marker\'s range', () => {
@@ -1425,6 +1445,16 @@ describe( 'Differ', () => {
 			expect( differ.getMarkersToAdd() ).to.deep.equal( [
 				{ name: 'name', range: rangeB }
 			] );
+
+			expect( differ.getChangedMarkers() ).to.deep.equal( [
+				{
+					name: 'name',
+					data: {
+						oldRange: range,
+						newRange: rangeB
+					}
+				}
+			] );
 		} );
 
 		it( 'add marker not affecting data', () => {
@@ -1445,6 +1475,8 @@ describe( 'Differ', () => {
 
 			expect( differ.getMarkersToRemove() ).to.deep.equal( [] );
 			expect( differ.getMarkersToAdd() ).to.deep.equal( [] );
+			expect( differ.getChangedMarkers() ).to.deep.equal( [] );
+
 			expect( differ.hasDataChanges() ).to.be.false;
 		} );
 
@@ -1457,6 +1489,16 @@ describe( 'Differ', () => {
 			expect( differ.getMarkersToAdd() ).to.deep.equal( [
 				{ name: 'name', range: rangeB }
 			] );
+
+			expect( differ.getChangedMarkers() ).to.deep.equal( [
+				{
+					name: 'name',
+					data: {
+						oldRange: null,
+						newRange: rangeB
+					}
+				}
+			] );
 		} );
 
 		it( 'change marker to not affecting data', () => {
@@ -1475,6 +1517,17 @@ describe( 'Differ', () => {
 			] );
 
 			expect( differ.getMarkersToAdd() ).to.deep.equal( [] );
+
+			expect( differ.getChangedMarkers() ).to.deep.equal( [
+				{
+					name: 'name',
+					data: {
+						oldRange: range,
+						newRange: null
+					}
+				}
+			] );
+
 			expect( differ.hasDataChanges() ).to.be.true;
 		} );
 
@@ -1489,6 +1542,16 @@ describe( 'Differ', () => {
 			expect( differ.getMarkersToAdd() ).to.deep.equal( [
 				{ name: 'name', range }
 			] );
+
+			expect( differ.getChangedMarkers() ).to.deep.equal( [
+				{
+					name: 'name',
+					data: {
+						oldRange: range,
+						newRange: range
+					}
+				}
+			] );
 		} );
 
 		it( 'change marker to the same range', () => {
@@ -1501,6 +1564,16 @@ describe( 'Differ', () => {
 			expect( differ.getMarkersToAdd() ).to.deep.equal( [
 				{ name: 'name', range }
 			] );
+
+			expect( differ.getChangedMarkers() ).to.deep.equal( [
+				{
+					name: 'name',
+					data: {
+						oldRange: range,
+						newRange: range
+					}
+				}
+			] );
 		} );
 	} );