Преглед на файлове

Made EditingController observable.

Oskar Wróbel преди 8 години
родител
ревизия
38f8d96061
променени са 2 файла, в които са добавени 17 реда и са изтрити 0 реда
  1. 6 0
      packages/ckeditor5-engine/src/controller/editingcontroller.js
  2. 11 0
      packages/ckeditor5-engine/tests/controller/editingcontroller.js

+ 6 - 0
packages/ckeditor5-engine/src/controller/editingcontroller.js

@@ -23,11 +23,15 @@ import {
 } from '../conversion/model-selection-to-view-converters';
 
 import EmitterMixin from '@ckeditor/ckeditor5-utils/src/emittermixin';
+import ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';
+import mix from '@ckeditor/ckeditor5-utils/src/mix';
 
 /**
  * Controller for the editing pipeline. The editing pipeline controls {@link ~EditingController#model model} rendering,
  * including selection handling. It also creates {@link ~EditingController#view view document} which build a
  * browser-independent virtualization over the DOM elements. Editing controller also attach default converters.
+ *
+ * @mixes module:utils/observablemixin~ObservableMixin
  */
 export default class EditingController {
 	/**
@@ -161,3 +165,5 @@ export default class EditingController {
 		this._listener.stopListening();
 	}
 }
+
+mix( EditingController, ObservableMixin );

+ 11 - 0
packages/ckeditor5-engine/tests/controller/editingcontroller.js

@@ -40,6 +40,17 @@ describe( 'EditingController', () => {
 
 			editing.destroy();
 		} );
+
+		it( 'should be observable', () => {
+			const model = new ModelDocument();
+			const editing = new EditingController( model );
+			const spy = sinon.spy();
+
+			editing.on( 'change:foo', spy );
+			editing.set( 'foo', 'bar' );
+
+			sinon.assert.calledOnce( spy );
+		} );
 	} );
 
 	describe( 'createRoot', () => {