Krzysztof Krztoń 7 роки тому
батько
коміт
3bce27f619

+ 6 - 15
packages/ckeditor5-core/src/editor/editorui.js

@@ -58,24 +58,17 @@ export default class EditorUI {
 		 * Stores all editable elements used by the editor instance.
 		 *
 		 * @protected
-		 * @member {Array.<module:ui/editorui/editoruiview~EditorUIView>}
+		 * @member {Map.<String,HTMLElement>}
 		 */
-		this._editableElements = [];
+		this._editableElements = new Map();
 
 		/**
-		 * **Deprecated** since `v12.0.0`. This property is deprecated and should not be used. Use the property
-		 * from the subclass directly instead, for example
-		 * {@link module:editor-classic/classiceditorui~ClassicEditorUI#_view ClassicEditorUI#_view}.
-		 *
 		 * The main (top–most) view of the editor UI.
 		 *
-		 * @deprecated v12.0.0 This property is deprecated and should not be used. Use the property
-		 * from the subclass directly instead, for example
-		 * {@link module:editor-classic/classiceditorui~ClassicEditorUI#_view ClassicEditorUI#_view}.
 		 * @private
 		 * @member {module:ui/editorui/editoruiview~EditorUIView} #_view
 		 */
-		this._view = view;
+		this._view = view; // This property was created in order to deprecate `this.view`. Should be removed with removal of `view` getter.
 
 		// Check if `view` parameter was passed. It is deprecated and should not be used.
 		if ( view ) {
@@ -172,18 +165,16 @@ export default class EditorUI {
 	 * @returns {HTMLElement|null}
 	 */
 	getEditableElement( rootName = 'main' ) {
-		const editable = this._editableElements.find( editable => editable.name === rootName );
-
-		return editable ? editable.element : null;
+		return this._editableElements.has( rootName ) ? this._editableElements.get( rootName ) : null;
 	}
 
 	/**
 	 * Returns array of names of all editor editable elements.
 	 *
-	 * @returns {Array.<String>}
+	 * @returns {Iterable.<String>}
 	 */
 	getEditableElementsNames() {
-		return this._editableElements.map( editable => editable.name );
+		return this._editableElements.keys();
 	}
 
 	/**

+ 9 - 7
packages/ckeditor5-core/tests/editor/editorui.js

@@ -128,7 +128,7 @@ describe( 'EditorUI', () => {
 			const ui = new EditorUI( editor );
 			const editableMock = { name: 'main', element: document.createElement( 'div' ) };
 
-			ui._editableElements.push( editableMock );
+			ui._editableElements.set( editableMock.name, editableMock.element );
 
 			expect( ui.getEditableElement() ).to.equal( editableMock.element );
 		} );
@@ -138,8 +138,8 @@ describe( 'EditorUI', () => {
 			const editableMock1 = { name: 'root1', element: document.createElement( 'div' ) };
 			const editableMock2 = { name: 'root2', element: document.createElement( 'p' ) };
 
-			ui._editableElements.push( editableMock1 );
-			ui._editableElements.push( editableMock2 );
+			ui._editableElements.set( editableMock1.name, editableMock1.element );
+			ui._editableElements.set( editableMock2.name, editableMock2.element );
 
 			expect( ui.getEditableElement( 'root1' ) ).to.equal( editableMock1.element );
 			expect( ui.getEditableElement( 'root2' ) ).to.equal( editableMock2.element );
@@ -153,15 +153,17 @@ describe( 'EditorUI', () => {
 	} );
 
 	describe( 'getEditableElementsNames()', () => {
-		it( 'should return array of names', () => {
+		it( 'should return iterable object of names', () => {
 			const ui = new EditorUI( editor );
 			const editableMock1 = { name: 'main', element: document.createElement( 'div' ) };
 			const editableMock2 = { name: 'root2', element: document.createElement( 'p' ) };
 
-			ui._editableElements.push( editableMock1 );
-			ui._editableElements.push( editableMock2 );
+			ui._editableElements.set( editableMock1.name, editableMock1.element );
+			ui._editableElements.set( editableMock2.name, editableMock2.element );
 
-			expect( ui.getEditableElementsNames() ).to.deep.equal( [ 'main', 'root2' ] );
+			const names = ui.getEditableElementsNames();
+			expect( names[ Symbol.iterator ] ).to.instanceof( Function );
+			expect( Array.from( names ) ).to.deep.equal( [ 'main', 'root2' ] );
 		} );
 
 		it( 'should return empty array if no editables', () => {