Bartosz Dziewoński has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/327796 )

Change subject: uw.DescriptionsDetailsWidget: Do not re-create description 
widgets in #setSerialized
......................................................................

uw.DescriptionsDetailsWidget: Do not re-create description widgets in 
#setSerialized

This was causing the copying of metadata, or returning to the
'Details' step after going back, to be much slower than it should be.

Change-Id: I5d07806cfe52347fa07b022f3670067f86b792e5
---
M resources/details/uw.DescriptionsDetailsWidget.js
1 file changed, 24 insertions(+), 12 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/UploadWizard 
refs/changes/96/327796/1

diff --git a/resources/details/uw.DescriptionsDetailsWidget.js 
b/resources/details/uw.DescriptionsDetailsWidget.js
index f254342..8dbede6 100644
--- a/resources/details/uw.DescriptionsDetailsWidget.js
+++ b/resources/details/uw.DescriptionsDetailsWidget.js
@@ -19,7 +19,7 @@
                        // Messages: mwe-upwiz-desc-add-0, mwe-upwiz-desc-add-n
                        label: mw.msg( 'mwe-upwiz-desc-add-' + ( !this.required 
? '0' : 'n' ) )
                } );
-               this.addDescriptionButton.connect( this, { click: 
'addDescription' } );
+               this.addDescriptionButton.connect( this, { click: [ 
'addDescriptions', 1 ] } );
 
                this.connect( this, { change: 'recountDescriptions' } );
 
@@ -43,10 +43,16 @@
        OO.mixinClass( uw.DescriptionsDetailsWidget, OO.ui.mixin.GroupElement );
 
        /**
-        * Add a description in another language.
+        * Add multiple descriptions in another language.
+        *
+        * @param {number} n Number of descriptions
         */
-       uw.DescriptionsDetailsWidget.prototype.addDescription = function () {
-               this.addItems( [ new uw.DescriptionDetailsWidget() ] );
+       uw.DescriptionsDetailsWidget.prototype.addDescriptions = function ( n ) 
{
+               var items = [];
+               while ( n-- ) {
+                       items.push( new uw.DescriptionDetailsWidget() );
+               }
+               this.addItems( items );
        };
 
        /**
@@ -120,14 +126,20 @@
         *   see uw.DescriptionDetailsWidget#setSerialized
         */
        uw.DescriptionsDetailsWidget.prototype.setSerialized = function ( 
serialized ) {
-               var items = serialized.descriptions.map( function ( serialized, 
i ) {
-                       var widget = new uw.DescriptionDetailsWidget( {
-                               canBeRemoved: !( this.required && i === 0 )
-                       } );
-                       widget.setSerialized( serialized );
-                       return widget;
-               }.bind( this ) );
-               this.clearItems().addItems( items );
+               var i, items;
+               items = this.getItems();
+               if ( items.length > serialized.descriptions.length ) {
+                       // Remove any additional, no longer needed descriptions
+                       this.removeItems( items.slice( 
/*start=*/serialized.descriptions.length ) );
+               } else if ( items.length < serialized.descriptions.length ) {
+                       // Add more descriptions if we had too few
+                       this.addDescriptions( serialized.descriptions.length - 
items.length );
+               }
+               items = this.getItems();
+               // Copy contents
+               for ( i = 0; i < serialized.descriptions.length; i++ ) {
+                       items[ i ].setSerialized( serialized.descriptions[ i ] 
);
+               }
        };
 
 } )( mediaWiki, mediaWiki.uploadWizard, jQuery, OO );

-- 
To view, visit https://gerrit.wikimedia.org/r/327796
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5d07806cfe52347fa07b022f3670067f86b792e5
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/UploadWizard
Gerrit-Branch: master
Gerrit-Owner: Bartosz Dziewoński <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to