( 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 += ''; } return resultOutput; } function itemWrapperTemplate( pageQuery, itemTemplateOutput ) { return '
  • ' + '
    ' + '' + imagesText.escaped() + '' + '
    ' + '
    ' + /* template output has been sanitized by mw.html.element */ itemTemplateOutput + '
    ' + '' + '
  • '; } 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 ) );