Browse Source

Extended Collection#add() with optional index parameter.

Aleksander Nowodzinski 10 years ago
parent
commit
a5e7bf1a7b

+ 7 - 2
packages/ckeditor5-engine/src/collection.js

@@ -79,8 +79,10 @@ CKEDITOR.define( [ 'emittermixin', 'ckeditorerror', 'utils' ], ( EmitterMixin, C
 		 *
 		 * @chainable
 		 * @param {Object} item
+		 * @param {Number} [index] The position of the item in the collection. The item
+		 * is pushed to the collection when `index` not specified.
 		 */
-		add( item ) {
+		add( item, index ) {
 			let itemId;
 			const idProperty = this._idProperty;
 
@@ -109,7 +111,10 @@ CKEDITOR.define( [ 'emittermixin', 'ckeditorerror', 'utils' ], ( EmitterMixin, C
 				item[ idProperty ] = itemId;
 			}
 
-			this._items.push( item );
+			// TODO: Use ES6 default function argument.
+			this._items.splice(
+				index === undefined ? this._items.length : index, 0, item );
+
 			this._itemMap.set( itemId, item );
 
 			this.fire( 'add', item );

+ 2 - 2
packages/ckeditor5-engine/src/ui/controller.js

@@ -97,8 +97,8 @@ CKEDITOR.define( [
 			var controllers = new Collection();
 			controllers.name = regionName;
 
-			controllers.on( 'add', ( evt, controller ) => {
-				this.view.add( controller.view, regionName );
+			controllers.on( 'add', ( evt, controller, index ) => {
+				this.view.add( controller.view, regionName, index );
 			} );
 
 			controllers.on( 'remove', ( evt, controller ) => {

+ 2 - 2
packages/ckeditor5-engine/src/ui/region.js

@@ -58,8 +58,8 @@ CKEDITOR.define( [ 'collection', 'model' ], ( Collection, Model ) => {
 			}
 		}
 
-		add( view ) {
-			this.views.add( view );
+		add( view, index ) {
+			this.views.add( view, index );
 		}
 
 		remove( view ) {

+ 2 - 2
packages/ckeditor5-engine/src/ui/view.js

@@ -272,8 +272,8 @@ CKEDITOR.define( [
 		 * @param
 		 * @returns
 		 */
-		add( view, regionName ) {
-			this.regions.get( regionName ).add( view );
+		add( view, regionName, index ) {
+			this.regions.get( regionName ).add( view, index );
 		}
 
 		remove( view, regionName ) {