summaryrefslogtreecommitdiff
path: root/www/wiki/resources/src/mediawiki.special/mediawiki.special.search.commonsInterwikiWidget.js
blob: 648bf6754055e17510c3c21b4f3cf8f8038344a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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 ) );