";
+ }
+
+ /**
+ * Generates an appropriate HTML header for the given interwiki prefix
+ *
+ * @param string $iwPrefix Interwiki prefix of wiki to show header for
+ * @param string $term User provided search term
+ * @return string HTML
+ */
+ protected function headerHtml( $iwPrefix, $term ) {
+ if ( isset( $this->customCaptions[$iwPrefix] ) ) {
+ $caption = $this->customCaptions[$iwPrefix];
+ } else {
+ $interwiki = $this->iwLookup->fetch( $iwPrefix );
+ $parsed = wfParseUrl( wfExpandUrl( $interwiki ? $interwiki->getURL() : '/' ) );
+ $caption = $this->specialSearch->msg( 'search-interwiki-default', $parsed['host'] )->escaped();
+ }
+
+ $href = Title::makeTitle( NS_SPECIAL, 'Search', null, $iwPrefix )->getLocalURL(
+ [ 'search' => $term, 'fulltext' => 1 ]
+ );
+ $searchLink = Html::rawElement(
+ 'a',
+ [ 'href' => $href ],
+ $this->specialSearch->msg( 'search-interwiki-more' )->escaped()
+ );
+
+ return
+ "
" .
+ "{$searchLink}" .
+ $caption .
+ "
";
+ }
+
+ protected function loadCustomCaptions() {
+ if ( $this->customCaptions !== null ) {
+ return;
+ }
+
+ $this->customCaptions = [];
+ $customLines = explode( "\n", $this->specialSearch->msg( 'search-interwiki-custom' )->escaped() );
+ foreach ( $customLines as $line ) {
+ $parts = explode( ':', $line, 2 );
+ if ( count( $parts ) === 2 ) {
+ $this->customCaptions[$parts[0]] = $parts[1];
+ }
+ }
+ }
+}
diff --git a/languages/i18n/en.json b/languages/i18n/en.json
index c771447c366..ba62bb8b66d 100644
--- a/languages/i18n/en.json
+++ b/languages/i18n/en.json
@@ -1002,6 +1002,7 @@
"search-interwiki-default": "Results from $1:",
"search-interwiki-custom": "",
"search-interwiki-more": "(more)",
+ "search-interwiki-more-results": "more results",
"search-relatedarticle": "Related",
"searchrelated": "related",
"searchall": "all",
diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json
index d5c16a9577f..2e02447210b 100644
--- a/languages/i18n/qqq.json
+++ b/languages/i18n/qqq.json
@@ -1188,6 +1188,7 @@
"search-interwiki-default": "Parameters:\n* $1 - the hostname of the remote wiki from where the additional results listed below are returned",
"search-interwiki-custom": "#REDIRECT [[MediaWiki:Wmf-search-interwiki-custom/qqq]]",
"search-interwiki-more": "{{Identical|More}}",
+ "search-interwiki-more-results": "Label for a link that leads to more search results from a given wiki.",
"search-relatedarticle": "This is a search result (and I guess search engine) dependent messages. I do not know how to trigger the feature. The message is displayed if the search result contains information that related pages can also be provided from the search engine. I assume this is \"More Like This\" functionality. Microsoft glossary defines MLT as \"A way to refine search by identifying the right set of documents and then locating similar documents. This allows the searcher to control the direction of the search and focus on the most fruitful lines of inquiry.\"[http://www.microsoft.com/enterprisesearch/en/us/search-glossary.aspx]\n{{Identical|Related}}",
"searchrelated": "This is a search result (and I guess search engine) dependent messages. I do not know how to trigger the feature. The message is displayed if the search result contains information that related pages can also be provided from the search engine. I assume this is \"More Like This\" functionality. Microsoft glossary defines MLT as \"A way to refine search by identifying the right set of documents and then locating similar documents. This allows the searcher to control the direction of the search and focus on the most fruitful lines of inquiry.\"[http://www.microsoft.com/enterprisesearch/en/us/search-glossary.aspx]\n{{Identical|Related}}",
"searchall": "{{Identical|All}}",
diff --git a/resources/Resources.php b/resources/Resources.php
index 70eef62f811..9bdf1a0be08 100644
--- a/resources/Resources.php
+++ b/resources/Resources.php
@@ -1983,6 +1983,23 @@ return [
'styles' => 'resources/src/mediawiki.special/mediawiki.special.search.styles.css',
'targets' => [ 'desktop', 'mobile' ],
],
+ 'mediawiki.special.search.interwikiwidget.styles' => [
+ 'styles' => 'resources/src/mediawiki.special/'
+ . 'mediawiki.special.search.interwikiwidget.styles.less',
+ 'targets' => [ 'desktop', 'mobile' ]
+ ],
+ 'mediawiki.special.search.commonsInterwikiWidget' => [
+ 'scripts' => 'resources/src/mediawiki.special/mediawiki.special.search.commonsInterwikiWidget.js',
+ 'dependencies' => [
+ 'mediawiki.Uri',
+ 'mediawiki.jqueryMsg'
+ ],
+ 'targets' => [ 'desktop', 'mobile' ],
+ 'messages' => [
+ 'search-interwiki-more',
+ 'searchprofile-images'
+ ],
+ ],
'mediawiki.special.undelete' => [
'scripts' => 'resources/src/mediawiki.special/mediawiki.special.undelete.js',
],
diff --git a/resources/src/mediawiki.special/images/special.search/book-icon.png b/resources/src/mediawiki.special/images/special.search/book-icon.png
new file mode 100644
index 00000000000..07e3ec746e7
Binary files /dev/null and b/resources/src/mediawiki.special/images/special.search/book-icon.png differ
diff --git a/resources/src/mediawiki.special/images/special.search/book-icon.svg b/resources/src/mediawiki.special/images/special.search/book-icon.svg
new file mode 100644
index 00000000000..6c3fa5f2aa7
--- /dev/null
+++ b/resources/src/mediawiki.special/images/special.search/book-icon.svg
@@ -0,0 +1,36 @@
+
+
\ No newline at end of file
diff --git a/resources/src/mediawiki.special/images/special.search/course-icon.png b/resources/src/mediawiki.special/images/special.search/course-icon.png
new file mode 100644
index 00000000000..9aad230aac1
Binary files /dev/null and b/resources/src/mediawiki.special/images/special.search/course-icon.png differ
diff --git a/resources/src/mediawiki.special/images/special.search/course-icon.svg b/resources/src/mediawiki.special/images/special.search/course-icon.svg
new file mode 100644
index 00000000000..4fab1f3d4aa
--- /dev/null
+++ b/resources/src/mediawiki.special/images/special.search/course-icon.svg
@@ -0,0 +1,35 @@
+
+
\ No newline at end of file
diff --git a/resources/src/mediawiki.special/images/special.search/definition-icon.png b/resources/src/mediawiki.special/images/special.search/definition-icon.png
new file mode 100644
index 00000000000..b279f4ed049
Binary files /dev/null and b/resources/src/mediawiki.special/images/special.search/definition-icon.png differ
diff --git a/resources/src/mediawiki.special/images/special.search/definition-icon.svg b/resources/src/mediawiki.special/images/special.search/definition-icon.svg
new file mode 100644
index 00000000000..1d589062440
--- /dev/null
+++ b/resources/src/mediawiki.special/images/special.search/definition-icon.svg
@@ -0,0 +1,22 @@
+
+
\ No newline at end of file
diff --git a/resources/src/mediawiki.special/images/special.search/dna-icon.png b/resources/src/mediawiki.special/images/special.search/dna-icon.png
new file mode 100644
index 00000000000..76ae7b97c30
Binary files /dev/null and b/resources/src/mediawiki.special/images/special.search/dna-icon.png differ
diff --git a/resources/src/mediawiki.special/images/special.search/dna-icon.svg b/resources/src/mediawiki.special/images/special.search/dna-icon.svg
new file mode 100644
index 00000000000..b6472d2975d
--- /dev/null
+++ b/resources/src/mediawiki.special/images/special.search/dna-icon.svg
@@ -0,0 +1,34 @@
+
+
\ No newline at end of file
diff --git a/resources/src/mediawiki.special/images/special.search/image-icon.png b/resources/src/mediawiki.special/images/special.search/image-icon.png
new file mode 100644
index 00000000000..1ebbc7414e8
Binary files /dev/null and b/resources/src/mediawiki.special/images/special.search/image-icon.png differ
diff --git a/resources/src/mediawiki.special/images/special.search/image-icon.svg b/resources/src/mediawiki.special/images/special.search/image-icon.svg
new file mode 100644
index 00000000000..b68762e09cc
--- /dev/null
+++ b/resources/src/mediawiki.special/images/special.search/image-icon.svg
@@ -0,0 +1,16 @@
+
+
\ No newline at end of file
diff --git a/resources/src/mediawiki.special/images/special.search/news-icon.png b/resources/src/mediawiki.special/images/special.search/news-icon.png
new file mode 100644
index 00000000000..6b79590dd37
Binary files /dev/null and b/resources/src/mediawiki.special/images/special.search/news-icon.png differ
diff --git a/resources/src/mediawiki.special/images/special.search/news-icon.svg b/resources/src/mediawiki.special/images/special.search/news-icon.svg
new file mode 100644
index 00000000000..996bc84b100
--- /dev/null
+++ b/resources/src/mediawiki.special/images/special.search/news-icon.svg
@@ -0,0 +1,31 @@
+
+
\ No newline at end of file
diff --git a/resources/src/mediawiki.special/images/special.search/quotation-icon.png b/resources/src/mediawiki.special/images/special.search/quotation-icon.png
new file mode 100644
index 00000000000..9d3ade30b80
Binary files /dev/null and b/resources/src/mediawiki.special/images/special.search/quotation-icon.png differ
diff --git a/resources/src/mediawiki.special/images/special.search/quotation-icon.svg b/resources/src/mediawiki.special/images/special.search/quotation-icon.svg
new file mode 100644
index 00000000000..0a24b3ef82e
--- /dev/null
+++ b/resources/src/mediawiki.special/images/special.search/quotation-icon.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/resources/src/mediawiki.special/images/special.search/textbook-icon.png b/resources/src/mediawiki.special/images/special.search/textbook-icon.png
new file mode 100644
index 00000000000..0de2821fadb
Binary files /dev/null and b/resources/src/mediawiki.special/images/special.search/textbook-icon.png differ
diff --git a/resources/src/mediawiki.special/images/special.search/textbook-icon.svg b/resources/src/mediawiki.special/images/special.search/textbook-icon.svg
new file mode 100644
index 00000000000..52446b88b19
--- /dev/null
+++ b/resources/src/mediawiki.special/images/special.search/textbook-icon.svg
@@ -0,0 +1,28 @@
+
+
\ No newline at end of file
diff --git a/resources/src/mediawiki.special/images/special.search/travel-icon.png b/resources/src/mediawiki.special/images/special.search/travel-icon.png
new file mode 100644
index 00000000000..9540e5b568a
Binary files /dev/null and b/resources/src/mediawiki.special/images/special.search/travel-icon.png differ
diff --git a/resources/src/mediawiki.special/images/special.search/travel-icon.svg b/resources/src/mediawiki.special/images/special.search/travel-icon.svg
new file mode 100644
index 00000000000..c61da34f030
--- /dev/null
+++ b/resources/src/mediawiki.special/images/special.search/travel-icon.svg
@@ -0,0 +1,15 @@
+
+
\ No newline at end of file
diff --git a/resources/src/mediawiki.special/mediawiki.special.search.commonsInterwikiWidget.js b/resources/src/mediawiki.special/mediawiki.special.search.commonsInterwikiWidget.js
new file mode 100644
index 00000000000..3810ac1b0a9
--- /dev/null
+++ b/resources/src/mediawiki.special/mediawiki.special.search.commonsInterwikiWidget.js
@@ -0,0 +1,80 @@
+( function ( mw, $ ) {
+
+ var api = new mw.Api(),
+ pageUrl = new mw.Uri(),
+ imagesText = new mw.Message( mw.messages, 'searchprofile-images' ),
+ moreResultsText = new mw.Message( mw.messages, 'search-interwiki-more' );
+
+ function itemTemplate( results ) {
+
+ var resultOutput = '', i, result, imageCaption, imageThumbnailSrc;
+
+ for ( i = 0; i < results.length; i++ ) {
+ result = results[ i ],
+ imageCaption = mw.html.element( 'span', { 'class': 'iw-result__mini-gallery__caption' }, result.title );
+ imageThumbnailSrc = ( result.thumbnail ) ? result.thumbnail.source : '';
+ resultOutput += '