EBernhardson has uploaded a new change for review.

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

Change subject: [WIP] Extract 'did you mean' widget out of SpecialSearch
......................................................................

[WIP] Extract 'did you mean' widget out of SpecialSearch

Change-Id: I41d767550ab4112fcd9cc4094b27a14c7d29169b
---
M autoload.php
M includes/specials/SpecialSearch.php
A includes/widget/search/DidYouMeanWidget.php
3 files changed, 107 insertions(+), 83 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/76/323976/1

diff --git a/autoload.php b/autoload.php
index 47fd07f..d5ddfda 100644
--- a/autoload.php
+++ b/autoload.php
@@ -926,6 +926,7 @@
        'MediaWiki\\Widget\\NamespaceInputWidget' => __DIR__ . 
'/includes/widget/NamespaceInputWidget.php',
        'MediaWiki\\Widget\\SearchInputWidget' => __DIR__ . 
'/includes/widget/SearchInputWidget.php',
        'MediaWiki\\Widget\\Search\\BasicSearchResultSetWidget' => __DIR__ . 
'/includes/widget/search/BasicSearchResultSetWidget.php',
+       'MediaWiki\\Widget\\Search\\DidYouMeanWidget' => __DIR__ . 
'/includes/widget/search/DidYouMeanWidget.php',
        'MediaWiki\\Widget\\Search\\FullSearchResultWidget' => __DIR__ . 
'/includes/widget/search/FullSearchResultWidget.php',
        'MediaWiki\\Widget\\Search\\InterwikiSearchResultSetWidget' => __DIR__ 
. '/includes/widget/search/InterwikiSearchResultSetWidget.php',
        'MediaWiki\\Widget\\Search\\SearchFormWidget' => __DIR__ . 
'/includes/widget/search/SearchFormWidget.php',
diff --git a/includes/specials/SpecialSearch.php 
b/includes/specials/SpecialSearch.php
index 9cb64f7..2cfd290 100644
--- a/includes/specials/SpecialSearch.php
+++ b/includes/specials/SpecialSearch.php
@@ -324,16 +324,6 @@
                        $textMatches = $textStatus->getValue();
                }
 
-               // did you mean... suggestions
-               $didYouMeanHtml = '';
-               if ( $textMatches ) {
-                       if ( $textMatches->hasRewrittenQuery() ) {
-                               $didYouMeanHtml = 
$this->getDidYouMeanRewrittenHtml( $term, $textMatches );
-                       } elseif ( $textMatches->hasSuggestion() ) {
-                               $didYouMeanHtml = $this->getDidYouMeanHtml( 
$textMatches );
-                       }
-               }
-
                // Get number of results
                $titleMatchesNum = $textMatchesNum = $numTitleMatches = 
$numTextMatches = 0;
                if ( $titleMatches ) {
@@ -360,6 +350,11 @@
                // Empty query -- straight view of search form
                if ( $isEmptySearch ) {
                        return;
+               }
+
+               if ( $textMatches ) {
+                       $dymWidget = new 
MediaWiki\Widget\Search\DidYouMeanWidget( $this );
+                       $out->addHtml( $dymWidget->render( $term, $textMatches 
) );
                }
 
                $out->addHTML( "<div class='searchresults'>" );
@@ -442,78 +437,6 @@
                Hooks::run( 'SpecialSearchResultsAppend', [ $this, $out, $term 
] );
        }
 
-       /**
-        * Generates HTML shown to the user when we have a suggestion about a 
query
-        * that might give more results than their current query.
-        */
-       protected function getDidYouMeanHtml( SearchResultSet $textMatches ) {
-               # mirror Go/Search behavior of original request ..
-               $params = [ 'search' => $textMatches->getSuggestionQuery() ];
-               if ( $this->fulltext === null ) {
-                       $params['fulltext'] = 'Search';
-               } else {
-                       $params['fulltext'] = $this->fulltext;
-               }
-               $stParams = array_merge( $params, $this->powerSearchOptions() );
-
-               $suggest = Linker::linkKnown(
-                       $this->getPageTitle(),
-                       $textMatches->getSuggestionSnippet() ?: null,
-                       [ 'id' => 'mw-search-DYM-suggestion' ],
-                       $stParams
-               );
-
-               # HTML of did you mean... search suggestion link
-               return Html::rawElement(
-                       'div',
-                       [ 'class' => 'searchdidyoumean' ],
-                       $this->msg( 'search-suggest' )->rawParams( $suggest 
)->parse()
-               );
-       }
-
-       /**
-        * Generates HTML shown to user when their query has been internally 
rewritten,
-        * and the results of the rewritten query are being returned.
-        *
-        * @param string $term The users search input
-        * @param SearchResultSet $textMatches The response to the users 
initial search request
-        * @return string HTML linking the user to their original $term query, 
and the one
-        *  suggested by $textMatches.
-        */
-       protected function getDidYouMeanRewrittenHtml( $term, SearchResultSet 
$textMatches ) {
-               // Showing results for '$rewritten'
-               // Search instead for '$orig'
-
-               $params = [ 'search' => $textMatches->getQueryAfterRewrite() ];
-               if ( $this->fulltext === null ) {
-                       $params['fulltext'] = 'Search';
-               } else {
-                       $params['fulltext'] = $this->fulltext;
-               }
-               $stParams = array_merge( $params, $this->powerSearchOptions() );
-
-               $rewritten = Linker::linkKnown(
-                       $this->getPageTitle(),
-                       $textMatches->getQueryAfterRewriteSnippet() ?: null,
-                       [ 'id' => 'mw-search-DYM-rewritten' ],
-                       $stParams
-               );
-
-               $stParams['search'] = $term;
-               $stParams['runsuggestion'] = 0;
-               $original = Linker::linkKnown(
-                       $this->getPageTitle(),
-                       htmlspecialchars( $term ),
-                       [ 'id' => 'mw-search-DYM-original' ],
-                       $stParams
-               );
-
-               return Html::rawElement(
-                       'div',
-                       [ 'class' => 'searchdidyoumean' ],
-                       $this->msg( 'search-rewritten' )->rawParams( 
$rewritten, $original )->escaped()
-               );
-       }
 
        /**
         * @param Title $title
@@ -609,10 +532,12 @@
 
        /**
         * Reconstruct the 'power search' options for links
+        * TODO: Instead of exposing this publicly, could we instead expose
+        *  a function for creating search links?
         *
         * @return array
         */
-       protected function powerSearchOptions() {
+       public function powerSearchOptions() {
                $opt = [];
                if ( $this->isPowerSearch() ) {
                        foreach ( $this->namespaces as $n ) {
diff --git a/includes/widget/search/DidYouMeanWidget.php 
b/includes/widget/search/DidYouMeanWidget.php
new file mode 100644
index 0000000..93f30ab
--- /dev/null
+++ b/includes/widget/search/DidYouMeanWidget.php
@@ -0,0 +1,98 @@
+<?php
+
+namespace MediaWiki\Widget\Search;
+
+use Linker;
+use SearchResultSet;
+use SpecialSearch;
+
+class DidYouMeanWidget {
+       /** @var SpecialSearch */
+       protected $specialSearch;
+
+       public function __construct( SpecialSearch $specialSearch ) {
+               $this->specialSearch = $specialSearch;
+       }
+
+       /**
+        * @var string $term The search term
+        * @var SearchResultSet $resultSet
+        * @return string HTML
+        */
+       public function render( $term, SearchResultSet $resultSet ) {
+               if ( $resultSet->hasRewrittenQuery() ) {
+                       $html = $this->rewrittenHtml( $term, $resultSet );
+               } elseif ( $resultSet->hasSuggestion() ) {
+                       $html = $this->suggestionHtml( $resultSet );
+               } else {
+                       return '';
+               }
+
+               return "<div class='searchdidyoumean'>$html</div>";
+       }
+
+       /**
+        * Generates HTML shown to user when their query has been internally
+        * rewritten, and the results of the rewritten query are being returned.
+        *
+        * @param string $term The users search input
+        * @param SearchResultSet $resultSet The response to the search request
+        * @return string HTML Links the user to their original $term query, 
and the
+        *  one suggested by $resultSet
+        */
+       protected function rewrittenHtml( $term, SearchResultSet $resultSet ) {
+               $params = [
+                       'search' => $resultSet->getQueryAfterRewrite(),
+                       // Don't magic this link into a 'go' link, it should 
always
+                       // show search results.
+                       'fultext' => 1,
+               ];
+               $stParams = array_merge( $params, 
$this->specialSearch->powerSearchOptions() );
+
+               $rewritten = Linker::linkKnown(
+                       $this->specialSearch->getPageTitle(),
+                       $resultSet->getQueryAfterRewriteSnippet() ?: null,
+                       [ 'id' => 'mw-search-DYM-rewritten' ],
+                       $stParams
+               );
+
+               $stParams['search'] = $term;
+               $stParams['runsuggestion'] = 0;
+               $original = Linker::linkKnown(
+                       $this->specialSearch->getPageTitle(),
+                       htmlspecialchars( $term ),
+                       [ 'id' => 'mwsearch-DYM-original' ],
+                       $stParams
+               );
+
+               return $this->specialSearch->msg( 'search-rewritten' )
+                       ->rawParams( $rewritten, $original )
+                       ->escaped();
+       }
+
+       /**
+        * Generates HTML shown to the user when we have a suggestion about
+        * a query that might give more/better results than their current
+        * query.
+        *
+        * @param SearchResultSet $resultSet
+        * @return string HTML
+        */
+       protected function suggestionHtml( SearchResultSet $resultSet ) {
+               $params = [
+                       'search' => $resultSet->getSuggestionQuery(),
+                       'fulltext' => 1,
+               ];
+               $stParams = array_merge( $params, 
$this->specialSearch->powerSearchOptions() );
+
+               $suggest = Linker::linkKnown(
+                       $this->specialSearch->getPageTitle(),
+                       $resultSet->getSuggestionSnippet() ?: null,
+                       [ 'id' => 'mw-search-DYM-suggestion' ],
+                       $stParams
+               );
+
+               return $this->specialSearch->msg( 'search-suggest' )
+                       ->rawParams( $suggest )->parse();
+       }
+}

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I41d767550ab4112fcd9cc4094b27a14c7d29169b
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: EBernhardson <ebernhard...@wikimedia.org>

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

Reply via email to