Browse Source

Added: conversion.ModelConversionDispatcher#convertMarker.

Szymon Cofalik 9 years ago
parent
commit
03348ecdc1

+ 15 - 0
packages/ckeditor5-engine/src/conversion/modelconversiondispatcher.js

@@ -328,6 +328,13 @@ export default class ModelConversionDispatcher {
 		}
 	}
 
+	convertMarker( type, name, range ) {
+		const consumable = this._createRangeConsumable( range );
+		const data = { name, range };
+
+		this.fire( type + ':' + name, data, consumable, this.conversionApi );
+	}
+
 	/**
 	 * Creates {@link module:engine/conversion/modelconsumable~ModelConsumable} with values to consume from given range, assuming that
 	 * given range has just been inserted to the model.
@@ -389,6 +396,14 @@ export default class ModelConversionDispatcher {
 		return consumable;
 	}
 
+	_createRangeConsumable( range ) {
+		const consumable = new Consumable();
+
+		consumable.add( range, 'range' );
+
+		return consumable;
+	}
+
 	/**
 	 * Tests passed `consumable` to check whether given event can be fired and if so, fires it.
 	 *

+ 43 - 0
packages/ckeditor5-engine/tests/conversion/modelconversiondispatcher.js

@@ -506,4 +506,47 @@ describe( 'ModelConversionDispatcher', () => {
 			expect( dispatcher.fire.calledWith( 'selectionAttribute:bold' ) ).to.be.false;
 		} );
 	} );
+
+	describe( 'convertMarker', () => {
+		let range;
+
+		beforeEach( () => {
+			range = ModelRange.createFromParentsAndOffsets( root, 0, root, 4 );
+		} );
+
+		it( 'should fire event based on passed parameters', () => {
+			sinon.spy( dispatcher, 'fire' );
+
+			const data = {
+				name: 'name',
+				range: range
+			};
+
+			dispatcher.convertMarker( 'addMarker', data );
+
+			expect( dispatcher.fire.calledWith( 'addMarker:name', data ) );
+
+			dispatcher.convertMarker( 'removeMarker', data );
+
+			expect( dispatcher.fire.calledWith( 'removeMarker:name', data ) );
+		} );
+
+		it( 'should prepare consumable values', () => {
+			const data = {
+				name: 'name',
+				range: range
+			};
+
+			dispatcher.on( 'addMarker:name', ( evt, data, consumable ) => {
+				expect( consumable.test( data.range, 'range' ) ).to.be.true;
+			} );
+
+			dispatcher.on( 'removeMarker:name', ( evt, data, consumable ) => {
+				expect( consumable.test( data.range, 'range' ) ).to.be.true;
+			} );
+
+			dispatcher.convertMarker( 'addMarker', data );
+			dispatcher.convertMarker( 'removeMarker', data );
+		} );
+	} );
 } );