8
0
Просмотр исходного кода

Merge pull request #34 from ckeditor/t/ckeditor5/746

Other: Introduced a check that prevents sharing source elements between editor instances. See ckeditor/ckeditor5#746.
Maciej 6 лет назад
Родитель
Сommit
b7146f4e88

+ 2 - 0
packages/ckeditor5-editor-decoupled/src/decouplededitor.js

@@ -17,6 +17,7 @@ import setDataInElement from '@ckeditor/ckeditor5-utils/src/dom/setdatainelement
 import mix from '@ckeditor/ckeditor5-utils/src/mix';
 import { isElement } from 'lodash-es';
 import CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';
+import secureSourceElement from '@ckeditor/ckeditor5-core/src/editor/utils/securesourceelement';
 
 /**
  * The {@glink builds/guides/overview#document-editor decoupled editor} implementation.
@@ -68,6 +69,7 @@ export default class DecoupledEditor extends Editor {
 
 		if ( isElement( sourceElementOrData ) ) {
 			this.sourceElement = sourceElementOrData;
+			secureSourceElement( this );
 		}
 
 		this.data.processor = new HtmlDataProcessor();

+ 20 - 0
packages/ckeditor5-editor-decoupled/tests/decouplededitor.js

@@ -125,6 +125,26 @@ describe( 'DecoupledEditor', () => {
 			} );
 		} );
 
+		// See: https://github.com/ckeditor/ckeditor5/issues/746
+		it( 'should throw when trying to create the editor using the same source element more than once', done => {
+			const sourceElement = document.createElement( 'div' );
+
+			// eslint-disable-next-line no-new
+			new DecoupledEditor( sourceElement );
+
+			DecoupledEditor.create( sourceElement )
+				.then(
+					() => {
+						expect.fail( 'Decoupled editor should not initialize on an element already used by other instance.' );
+					},
+					err => {
+						assertCKEditorError( err, /^editor-source-element-already-used/ );
+					}
+				)
+				.then( done )
+				.catch( done );
+		} );
+
 		it( 'throws if initial data is passed in Editor#create and config.initialData is also used', done => {
 			DecoupledEditor.create( '<p>Hello world!</p>', {
 				initialData: '<p>I am evil!</p>',