Henning Snater has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/51662


Change subject: (bug 44674) Entity search: Prevent closing suggestion list
......................................................................

(bug 44674) Entity search: Prevent closing suggestion list

The change set prevents the suggestion list of the entity selector replacing 
the native
search box from closing if there are no actual suggestions. If there are no 
suggestions,
the link to the full-text search will remain visible.

Change-Id: I0069a6b1ae1f6264c2a59c29bafffbb6b520a946
---
M lib/resources/jquery.wikibase/jquery.wikibase.entityselector.js
M repo/resources/wikibase.ui.entitysearch.js
2 files changed, 24 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/62/51662/1

diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.entityselector.js 
b/lib/resources/jquery.wikibase/jquery.wikibase.entityselector.js
index 55cfd66..59cd1a7 100644
--- a/lib/resources/jquery.wikibase/jquery.wikibase.entityselector.js
+++ b/lib/resources/jquery.wikibase/jquery.wikibase.entityselector.js
@@ -51,7 +51,7 @@
  * @option messages['more'] {String} (optional) Label of the link to display 
more suggestions.
  *         Default value: 'more'
  *
- * @option emulateSearch {boolean} (optional) Allows emulating the behaviour 
of a search box by
+ * @option emulateSearchBox {boolean} (optional) Allows emulating the 
behaviour of a search box by
  *         linking the entities to their corresponding pages. Instead of 
selecting an entity, the
  *         whole page will be redirected to the entity page.
  *         Default value: false
@@ -117,7 +117,7 @@
                                'aliases-label': mwMsgOrString( 
'wikibase-aliases-label', 'also known as:' ),
                                'more': mwMsgOrString( 
'wikibase-entityselector-more', 'more' )
                        },
-                       emulateSearch: false // TODO: Allow setting a custom 
target to trigger the redirect on
+                       emulateSearchBox: false // TODO: Allow setting a custom 
target to trigger the redirect on
                },
 
                /**
@@ -193,7 +193,7 @@
                                // and select it
                                if ( event.keyCode === $.ui.keyCode.ENTER ) {
 
-                                       if ( self.options.emulateSearch && 
self.selectedEntity() ) {
+                                       if ( self.options.emulateSearchBox && 
self.selectedEntity() ) {
                                                // Prevent submitting search 
form since we want to redirect directly to the
                                                // entity.
                                                
event.stopImmediatePropagation();
@@ -231,7 +231,7 @@
                                                $( event.target ).closest( 
'.ui-menu-item' ).data( 'item.autocomplete' );
                                        self._setEntity( item );
 
-                                       if ( self.options.emulateSearch ) {
+                                       if ( self.options.emulateSearchBox ) {
                                                window.location.href = item.url;
                                        }
 
@@ -344,7 +344,21 @@
                 * @see ui.suggester.close
                 */
                close: function( event ) {
-                       if ( !event || !event.originalEvent || 
event.originalEvent.type !== 'programmatic' ) {
+                       var originalType = ( event && event.originalEvent && 
event.originalEvent.type )
+                               ? event.originalEvent.type
+                               : null;
+
+                       // When emulating a search box and there is a custom 
item, only close the list of
+                       // suggestions when blurring or when there is no text 
in the input box.
+                       if (
+                               this.options.emulateSearchBox && 
this.options.customListItem
+                               && originalType !== 'blur' && 
this.element.val() !== ''
+                       ) {
+                               // Reset list content leaving just the custom 
item.
+                               this.offset = 0;
+                               this.menu.element.children().remove();
+                               this.menu.refresh();
+                       } else {
                                // Do not close the list of suggestions when 
programmatically selecting an entity
                                // (e.g by typing an exact, unique entity 
label), allowing the user to check that
                                // the typed string actually matches a single 
entity.
@@ -486,13 +500,13 @@
                                        }
                                } else {
                                        this._setEntity( null );
-                                       if ( this.options.emulateSearch ) {
+                                       if ( this.options.emulateSearchBox ) {
                                                this._hiddenInput( 
this.element.val() );
                                        }
                                }
                                return true;
                        }
-                       if ( this.options.emulateSearch ) {
+                       if ( this.options.emulateSearchBox ) {
                                this._hiddenInput( this.element.val() );
                        }
                        return false;
@@ -523,7 +537,7 @@
                                ),
                                $section = $( '<li/>' ).data( 
'item.autocomplete', item ).append( $link );
 
-                       if ( this.options.emulateSearch ) {
+                       if ( this.options.emulateSearchBox ) {
                                $link.attr( 'href', item.url );
                        }
 
@@ -607,7 +621,7 @@
                                found = true;
                        }
 
-                       if ( !found && !alreadySelected && 
!this.options.emulateSearch ) {
+                       if ( !found && !alreadySelected && 
!this.options.emulateSearchBox ) {
                                this._setEntity( null );
                        }
                        return found;
diff --git a/repo/resources/wikibase.ui.entitysearch.js 
b/repo/resources/wikibase.ui.entitysearch.js
index ca56e69..bcf3157 100644
--- a/repo/resources/wikibase.ui.entitysearch.js
+++ b/repo/resources/wikibase.ui.entitysearch.js
@@ -43,7 +43,7 @@
                .entityselector( {
                        url: mw.config.get( 'wgServer' ) + mw.config.get( 
'wgScriptPath' ) + '/api.php',
                        language: mw.config.get( 'wgUserLanguage' ),
-                       emulateSearch: true
+                       emulateSearchBox: true
                } );
 
        } );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0069a6b1ae1f6264c2a59c29bafffbb6b520a946
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Henning Snater <henning.sna...@wikimedia.de>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to