Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
InterwikiSearchResultWidget
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 2
30
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 render
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2
3namespace MediaWiki\Search\SearchWidgets;
4
5use HtmlArmor;
6use MediaWiki\Html\Html;
7use MediaWiki\Linker\LinkRenderer;
8use MediaWiki\Specials\SpecialSearch;
9use SearchResult;
10
11/**
12 * Renders an enhanced interwiki result
13 */
14class InterwikiSearchResultWidget implements SearchResultWidget {
15    protected SpecialSearch $specialSearch;
16    protected LinkRenderer $linkRenderer;
17
18    public function __construct( SpecialSearch $specialSearch, LinkRenderer $linkRenderer ) {
19        $this->specialSearch = $specialSearch;
20        $this->linkRenderer = $linkRenderer;
21    }
22
23    /**
24     * @param SearchResult $result The result to render
25     * @param int $position The result position, including offset
26     * @return string HTML
27     */
28    public function render( SearchResult $result, $position ) {
29        $title = $result->getTitle();
30        $titleSnippet = $result->getTitleSnippet();
31        $snippet = $result->getTextSnippet();
32
33        if ( $titleSnippet ) {
34            $titleSnippet = new HtmlArmor( $titleSnippet );
35        } else {
36            $titleSnippet = null;
37        }
38
39        $link = $this->linkRenderer->makeLink( $title, $titleSnippet );
40
41        $redirectTitle = $result->getRedirectTitle();
42        $redirect = '';
43        if ( $redirectTitle !== null ) {
44            $redirectText = $result->getRedirectSnippet();
45
46            if ( $redirectText ) {
47                $redirectText = new HtmlArmor( $redirectText );
48            } else {
49                $redirectText = null;
50            }
51
52            $redirect = Html::rawElement( 'span', [ 'class' => 'iw-result__redirect' ],
53                $this->specialSearch->msg( 'search-redirect' )->rawParams(
54                    $this->linkRenderer->makeLink( $redirectTitle, $redirectText )
55                )->escaped()
56            );
57        }
58
59        return Html::rawElement( 'div', [ 'class' => 'iw-result__title' ], $link . ' ' . $redirect ) .
60            Html::rawElement( 'div', [ 'class' => 'iw-result__content' ], $snippet );
61    }
62}