Allow the gallery dialog to insert duplicate images initially

Change I94f4fadd84cd3e prevents the gallery dialog from inserting
duplicate images into the gallery dialog after one request (e.g.
so double-clicking on an image in the search widget doesn't cause
the image to be inserted twice). However, galleries can
intentionally contain duplicates of the same image, so it is
possible to make a spearate request to insert a duplicate image.

When the dialog is first opened, it requests all the images in
the gallery at once, so the above change was causing the
duplicates in an existing gallery to be dropped. Duplicates
should be allowed to be inserted following this initial request.

Bug: T150894
Change-Id: I34353bc9b8db947488474c4be52292e0a1447705
This commit is contained in:
Thalia 2016-11-19 15:51:21 +00:00
parent 7f613ed571
commit 003ec7b653
2 changed files with 25 additions and 14 deletions

View file

@ -52,7 +52,8 @@ ve.ui.MWGalleryDialog.prototype.initialize = function () {
// States
this.highlightedItem = null;
this.searchPanelVisible = false;
this.imageCaptions = {};
this.selectedFilenames = {};
this.initialImageData = [];
// Default settings
this.defaults = mw.config.get( 'wgVisualEditorConfig' ).galleryOptions;
@ -300,7 +301,10 @@ ve.ui.MWGalleryDialog.prototype.getSetupProcess = function ( data ) {
if ( title ) {
titleText = title.getPrefixedText();
imageTitles.push( titleText );
dialog.imageCaptions[ titleText ] = matches[ 3 ];
dialog.initialImageData.push( {
title: titleText,
caption: matches[ 3 ]
} );
}
}
}
@ -433,14 +437,21 @@ ve.ui.MWGalleryDialog.prototype.onRequestImagesSuccess = function ( deferred, re
}
}
for ( title in this.imageCaptions ) {
if ( this.initialImageData.length > 0 ) {
this.initialImageData.forEach( function ( image ) {
image.thumbUrl = thumbUrls[ image.title ];
items.push( new ve.ui.MWGalleryItemWidget( image ) );
} );
this.initialImageData = [];
} else {
for ( title in this.selectedFilenames ) {
if ( Object.prototype.hasOwnProperty.call( thumbUrls, title ) ) {
items.push( new ve.ui.MWGalleryItemWidget( {
title: title,
caption: this.imageCaptions[ title ],
thumbUrl: thumbUrls[ title ]
} ) );
delete this.imageCaptions[ title ];
delete this.selectedFilenames[ title ];
}
}
}
this.galleryGroup.addItems( items );
@ -459,8 +470,8 @@ ve.ui.MWGalleryDialog.prototype.onRequestImagesSuccess = function ( deferred, re
ve.ui.MWGalleryDialog.prototype.addNewImage = function ( title ) {
var dialog = this;
// Reset this.imageCaptions, for onRequestImagesSuccess
this.imageCaptions[ title ] = '';
// Make list of unique pending images, for onRequestImagesSuccess
this.selectedFilenames[ title ] = true;
// Request image
this.requestImages( {
@ -482,7 +493,7 @@ ve.ui.MWGalleryDialog.prototype.addNewImage = function ( title ) {
ve.ui.MWGalleryDialog.prototype.onSearchResultsChoose = function ( item ) {
var title = mw.Title.newFromText( item.getData().title ).getPrefixedText();
if ( !Object.prototype.hasOwnProperty( this.imageCaptions, title ) ) {
if ( !Object.prototype.hasOwnProperty( this.selectedFilenames, title ) ) {
this.addNewImage( title );
}
};

View file

@ -19,7 +19,7 @@
ve.ui.MWGalleryItemWidget = function VeUiMWGalleryItemWidget( imageInfo, config ) {
this.imageTitle = imageInfo.title;
this.thumbUrl = imageInfo.thumbUrl;
this.caption = imageInfo.caption;
this.caption = imageInfo.caption || '';
this.highlighted = false;
// Configuration initialization