Browse Source

Added: model.MarkerCollection#getMarkersGroup.

Szymon Cofalik 9 years ago
parent
commit
2db1db8d15

+ 21 - 0
packages/ckeditor5-engine/src/model/markercollection.js

@@ -129,6 +129,27 @@ export default class MarkerCollection {
 	}
 
 	/**
+	 * Iterates over all markers that starts with given `prefix`.
+	 *
+	 *		const markerFooA = markersCollection.set( 'foo:a', rangeFooA );
+	 *		const markerFooB = markersCollection.set( 'foo:b', rangeFooB );
+	 *		const markerBarA = markersCollection.set( 'bar:a', rangeBarA );
+	 *		const markerFooBarA = markersCollection.set( 'foobar:a', rangeFooBarA );
+	 *		Array.from( markersCollection.getMarkersGroup( 'foo' ) ); // [ markerFooA, markerFooB ]
+	 *		Array.from( markersCollection.getMarkersGroup( 'a' ) ); // []
+	 *
+	 * @param prefix
+	 * @returns {Iterator.<~Marker>}
+	 */
+	*getMarkersGroup( prefix ) {
+		for ( let marker of this._markers.values() ) {
+			if ( marker.name.indexOf( prefix + ':' ) === 0 ) {
+				yield marker;
+			}
+		}
+	}
+
+	/**
 	 * Destroys marker.
 	 *
 	 * @private

+ 12 - 0
packages/ckeditor5-engine/tests/model/markercollection.js

@@ -155,6 +155,18 @@ describe( 'MarkerCollection', () => {
 		} );
 	} );
 
+	describe( 'getMarkersGroup', () => {
+		it( 'returns all markers which names start on given prefix', () => {
+			const markerFooA = markers.set( 'foo:a', range );
+			const markerFooB = markers.set( 'foo:b', range );
+			markers.set( 'bar:a', range );
+			markers.set( 'foobar:a', range );
+
+			expect( Array.from( markers.getMarkersGroup( 'foo' ) ) ).to.deep.equal( [ markerFooA, markerFooB ] );
+			expect( Array.from( markers.getMarkersGroup( 'a' ) ) ).to.deep.equal( [] );
+		} );
+	} );
+
 	describe( 'destroy', () => {
 		it( 'should make MarkerCollection stop listening to all events and destroy all markers', () => {
 			const markerA = markers.set( 'a', range );