From df3525618374336f1cee911176c49c4eb6f73cf9 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 14 Mar 2008 00:56:22 +0000 Subject: [PATCH] Some search UI cleanup: * Remove two of three redundant instances of "Search" in the mini-form at the top of the page. * Compact things a bit at the top -- remove the fieldset, collapse a blank line in the paging area. * Include score info if provided (eg by Lucene) * Format the score/size/date line similarly to LuceneSearch ** but without hardcoding the color! * Format the list with bullets as with LuceneSearch ** but without hardcoding the padding! ** this allows us to skip deleted results without looking quite as weird * Skip line numbers in text extracts. Nobody cares and they clutter things up! LuceneSearch dropped them long ago. * Hardcode context extract lines to 2; old default of 5 is too many. May drop the preference. * Use more compact file info for image results * Hopefully fix click behavior for Ogg results * Include text extracts along with image results, if applicable. * There are still issues with vertical alignment of the bullet on image results. :( --- includes/DefaultSettings.php | 2 +- includes/SpecialSearch.php | 83 +++++++++++++++++++------------ languages/messages/MessagesEn.php | 2 + skins/common/shared.css | 8 +++ 4 files changed, 63 insertions(+), 32 deletions(-) diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index d3f8d072f7..1cb8346231 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -1326,7 +1326,7 @@ $wgCacheEpoch = '20030516000000'; * to ensure that client-side caches don't keep obsolete copies of global * styles. */ -$wgStyleVersion = '121'; +$wgStyleVersion = '122'; # Server-side caching: diff --git a/includes/SpecialSearch.php b/includes/SpecialSearch.php index 8034003841..26ae8a23fd 100644 --- a/includes/SpecialSearch.php +++ b/includes/SpecialSearch.php @@ -191,7 +191,7 @@ class SpecialSearch { $this->powerSearchOptions(), array( 'search' => $term ) ), ($num < $this->limit) ); - $wgOut->addHTML( "
{$prevnext}\n" ); + $wgOut->addHTML( "

{$prevnext}

\n" ); } if( $titleMatches ) { @@ -306,12 +306,12 @@ class SpecialSearch { $terms = implode( '|', $tm ); $off = $this->offset + 1; - $out = "
    \n"; + $out = "
\n"; + $out .= "\n"; // convert the whole thing to desired language variant global $wgContLang; @@ -337,7 +337,8 @@ class SpecialSearch { } $sk = $wgUser->getSkin(); - $contextlines = $wgUser->getOption( 'contextlines', 5 ); + //$contextlines = $wgUser->getOption( 'contextlines', 5 ); + $contextlines = 2; // Hardcode this. Old defaults sucked. :) $contextchars = $wgUser->getOption( 'contextchars', 50 ); $link = $sk->makeKnownLinkObj( $t ); @@ -349,50 +350,73 @@ class SpecialSearch { return "
  • {$link}
  • \n"; } - $extract = $size = ''; + $revision = Revision::newFromTitle( $t ); + // If the page doesn't *exist*... our search index is out of date. + // The least confusing at this point is to drop the result. + // You may get less results, but... oh well. :P + if( !$revision ) { + return "\n"; + } + + $text = $revision->getText(); + $size = wfMsgHtml( 'search-result-size', + $sk->formatSize( strlen( $text ) ), + str_word_count( $text ) ); + $date = $wgLang->timeanddate( $revision->getTimestamp() ); + + if( is_null( $result->getScore() ) ) { + // Search engine doesn't report scoring info + $score = ''; + } else { + $percent = sprintf( '%2.1f', $result->getScore() * 100 ); + $score = wfMsg( 'search-result-score', $wgLang->formatNum( $percent ) ) + . ' - '; + } + + $extract = $this->extractText( $text, $terms, $contextlines, $contextchars ); + // Include a thumbnail for media files... if( $t->getNamespace() == NS_IMAGE ) { $img = wfFindFile( $t ); if( $img ) { $thumb = $img->getThumbnail( 120, 120 ); if( $thumb ) { - $extract = '' . + $desc = $img->getShortDesc(); + wfProfileOut( $fname ); + // Ugly table. :D + // Float doesn't seem to interact well with the bullets. + // Table messes up vertical alignment of the bullet, but I'm + // not sure what more I can do about that. :( + return "
  • " . + '
  • ' . '' . '' . - '' . '' . - '
    ' . - $sk->makeKnownLinkObj( $t, $thumb->toHtml() ) . + $thumb->toHtml( array( 'desc-link' => true ) ) . '' . + '' . $link . - '
    ' . - $img->getLongDesc() . + $extract . + "
    {$score}{$desc} - {$date}
    " . '
    '; - wfProfileOut( $fname ); - return "
  • {$extract}
  • \n"; + '' . + "\n"; } } } - $extract = $this->extractText( $t, $terms, $contextlines, $contextchars ); wfProfileOut( $fname ); - return "
  • {$link} {$extract}
  • \n"; + return "
  • {$link} {$extract}\n" . + "
    {$score}{$size} - {$date}
    " . + "
  • \n"; } - private function extractText( $t, $terms, $contextlines, $contextchars ) { + private function extractText( $text, $terms, $contextlines, $contextchars ) { global $wgLang, $wgContLang; $fname = __METHOD__; - $revision = Revision::newFromTitle( $t ); - if( !$revision ) { - return ''; - } - - $text = $revision->getText(); - $size = wfMsgExt( 'nbytes', array( 'parsemag', 'escape'), - $wgLang->formatNum( strlen( $text ) ) ); - $lines = explode( "\n", $text ); $max = intval( $contextchars ) + 1; @@ -400,7 +424,7 @@ class SpecialSearch { $lineno = 0; - $extract = "($size)"; + $extract = ""; wfProfileIn( "$fname-extract" ); foreach ( $lines as $line ) { if ( 0 == $contextlines ) { @@ -427,7 +451,7 @@ class SpecialSearch { $line = preg_replace( $pat2, "\\1", $line ); - $extract .= "
    {$lineno}: {$line}\n"; + $extract .= "
    {$line}\n"; } wfProfileOut( "$fname-extract" ); @@ -493,12 +517,9 @@ class SpecialSearch { 'method' => 'get', 'action' => $wgScript )); - $out .= Xml::openElement( 'fieldset' ); - $out .= Xml::element( 'legend', array(), wfMsg( 'searchresultshead' ) ); $out .= Xml::hidden( 'title', 'Special:Search' ); - $out .= Xml::inputLabel( wfMsg( 'search' ), 'search', 'searchbox', 50, $term ) . ' '; + $out .= Xml::input( 'search', 50, $term ) . ' '; $out .= Xml::submitButton( wfMsg( 'searchbutton' ) ); - $out .= Xml::closeElement( 'fieldset' ); $out .= Xml::closeElement( 'form' ); return $out; diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php index d0743f999d..e06374daad 100644 --- a/languages/messages/MessagesEn.php +++ b/languages/messages/MessagesEn.php @@ -1218,6 +1218,8 @@ Make sure that this change will maintain historical page continuity. 'prevn' => 'previous $1', 'nextn' => 'next $1', 'viewprevnext' => 'View ($1) ($2) ($3)', +'search-result-size' => "$1 ($2 words)", +'search-result-score' => "Relevance: $1%", 'showingresults' => "Showing below up to {{PLURAL:$1|'''1''' result|'''$1''' results}} starting with #'''$2'''.", 'showingresultsnum' => "Showing below {{PLURAL:$3|'''1''' result|'''$3''' results}} starting with #'''$2'''.", 'nonefound' => "'''Note''': Unsuccessful searches are often caused by searching for common words like \"have\" and \"from\", which are not indexed, or by specifying more than one search term (only pages containing all of the search terms will appear in the result).", diff --git a/skins/common/shared.css b/skins/common/shared.css index d9e7624f98..fd96b983f3 100644 --- a/skins/common/shared.css +++ b/skins/common/shared.css @@ -89,3 +89,11 @@ p.mw-ipb-conveniencelinks, p.mw-filedelete-editreasons, p.mw-delete-editreasons font-size: 90%; float: right; } + +/* Search results */ +.mw-search-results li { + padding-bottom: 1em; +} +.mw-search-result-data { + color: green; +} -- 2.20.1