Parcourir la source

Added static method `createFromRanges` to view/selection.

Maciej Bukowski il y a 8 ans
Parent
commit
58a26d8072

+ 15 - 0
packages/ckeditor5-engine/src/view/selection.js

@@ -497,6 +497,21 @@ export default class Selection {
 	}
 
 	/**
+	 * Creates and returns an instance of `Selection` that is created from the given ranges.
+	 * Accepts a flag describing in which way the selection is made (see {@link #addRange addRange}).
+	 *
+	 * @param {Array.<module:engine/view/range~Range>} ranges Array of ranges to set.
+	 * @param {Boolean} [isLastBackward] Flag describing if last added range was selected forward - from start to end
+	 * (`false`) or backward - from end to start (`true`). Defaults to `false`.
+	 */
+	static createFromRanges( ranges, isLastBackward ) {
+		const selection = new Selection();
+		selection.setRanges( ranges, isLastBackward );
+
+		return selection;
+	}
+
+	/**
 	 * Adds range to selection - creates copy of given range so it can be safely used and modified.
 	 *
 	 * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-selection-range-intersects` if added range intersects

+ 16 - 0
packages/ckeditor5-engine/tests/view/selection.js

@@ -26,6 +26,22 @@ describe( 'Selection', () => {
 		range3 = Range.createFromParentsAndOffsets( el, 12, el, 14 );
 	} );
 
+	describe( 'createFromRanges', () => {
+		it( 'should be able to initialize selection with ranges', () => {
+			const ranges = [ range1, range2, range3 ];
+			const selection = Selection.createFromRanges( ranges );
+
+			expect( Array.from( selection.getRanges() ) ).to.deep.equal( ranges );
+		} );
+
+		it( 'should be able to initialize selection with ranges and isLastBackward flag', () => {
+			const ranges = [ range1, range2, range3 ];
+			const selection = Selection.createFromRanges( ranges, true );
+
+			expect( selection.isBackward ).to.be.true;
+		} );
+	} );
+
 	describe( 'anchor', () => {
 		it( 'should return null if no ranges in selection', () => {
 			expect( selection.anchor ).to.be.null;