summaryrefslogtreecommitdiff
path: root/www/wiki/resources/src/mediawiki.special/mediawiki.special.search.commonsInterwikiWidget.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/resources/src/mediawiki.special/mediawiki.special.search.commonsInterwikiWidget.js')
-rw-r--r--www/wiki/resources/src/mediawiki.special/mediawiki.special.search.commonsInterwikiWidget.js78
1 files changed, 78 insertions, 0 deletions
diff --git a/www/wiki/resources/src/mediawiki.special/mediawiki.special.search.commonsInterwikiWidget.js b/www/wiki/resources/src/mediawiki.special/mediawiki.special.search.commonsInterwikiWidget.js
new file mode 100644
index 00000000..648bf675
--- /dev/null
+++ b/www/wiki/resources/src/mediawiki.special/mediawiki.special.search.commonsInterwikiWidget.js
@@ -0,0 +1,78 @@
+( 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-results' );
+
+ 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 += '<div class="iw-result__mini-gallery">' +
+ /* escaping response content */
+ mw.html.element( 'a', {
+ href: '/wiki/' + result.title,
+ 'class': 'iw-result__mini-gallery__image',
+ style: 'background-image: url(' + imageThumbnailSrc + ');'
+ }, new mw.html.Raw( imageCaption ) ) +
+ '</div>';
+ }
+
+ return resultOutput;
+ }
+
+ function itemWrapperTemplate( pageQuery, itemTemplateOutput ) {
+
+ return '<li class="iw-resultset iw-resultset--image" data-iw-resultset-pos="0">' +
+ '<div class="iw-result__header">' +
+ '<strong>' + imagesText.escaped() + '</strong>' +
+ '</div>' +
+ '<div class="iw-result__content">' +
+ /* template output has been sanitized by mw.html.element */
+ itemTemplateOutput +
+ '</div>' +
+ '<div class="iw-result__footer">' +
+ '<a href="/w/index.php?title=Special:Search&search=' + encodeURIComponent( pageQuery ) + '&fulltext=1&profile=images">' +
+ moreResultsText.escaped() +
+ '</a>' +
+ '</div>' +
+ '</li>';
+
+ }
+
+ api.get( {
+ action: 'query',
+ generator: 'search',
+ gsrsearch: pageUrl.query.search,
+ gsrnamespace: mw.config.get( 'wgNamespaceIds' ).file,
+ gsrlimit: 3,
+ prop: 'pageimages',
+ pilimit: 3,
+ piprop: 'thumbnail',
+ pithumbsize: 300,
+ formatversion: 2
+ } ).done( function ( resp ) {
+ var results = ( resp.query && resp.query.pages ) ? resp.query.pages : false,
+ multimediaWidgetTemplate;
+
+ if ( !results ) {
+ return;
+ }
+
+ results.sort( function ( a, b ) {
+ return a.index - b.index;
+ } );
+
+ multimediaWidgetTemplate = itemWrapperTemplate( pageUrl.query.search, itemTemplate( results ) );
+ /* we really only need to wait for document ready for DOM manipulation */
+ $( function () {
+ $( '.iw-results' ).append( multimediaWidgetTemplate );
+ } );
+ } );
+
+}( mediaWiki, jQuery ) );