User:Valerio Bozzolan/MediaWiki:Wdsearch.js

/* USAGE: On en.wikipedia, add the following line:

if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search' || ( mw.config.get( 'wgArticleId' ) === 0 && mw.config.get( 'wgCanonicalSpecialPageName' ) === false ) ) { importScript('MediaWiki:Wdsearch.js'); }

to your common.js page. On other Wikipedias, add

if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Search' || ( mw.config.get( 'wgArticleId' ) === 0 && mw.config.get( 'wgCanonicalSpecialPageName' ) === false ) ) { mw.loader.load("//en.wikipedia.org/w/index.php?title=MediaWiki:Wdsearch.js&action=raw&ctype=text/javascript"); }

instead. To change the header line to your language, have an admin add the appropriate line to this page.

You can set the variable "wdsearch_results" to change the maximum number of search results from the default 10.

/*global jQuery, mediaWiki, wd_auto_desc, wdsearch_results, importScriptURI */ /*jshint strict:false, browser:true, quotmark:single */ (function( $, mw ) {

var i18n = { 'en' : { 'commons_cat' : 'Commons category' , 'wikipedias' : 'Wikipedia articles' , 'wikivoyages' : 'Wikivoyage travel guides' , 'wikisources' : 'Wikisource pages' , 'header' : 'Wikidata search results' , 'reasonator' : 'Show item details on Reasonator' },	'bn' : { 'commons_cat' : 'কমন্স বিষয়শ্রেণী' , 'wikipedias' : 'উইকিপিডিয়া নিবন্ধ' , 'header' : 'উইকিউপাত্ত অনুসন্ধানের ফলাফল', 'reasonator' : 'Reasonator-এ আইটেমের বিস্তারিত দেখাও' },	'ca' : { 'commons_cat' : 'Categoria de Commons' , 'wikipedias' : 'Articles de la Viquipèdia' , 'wikivoyages' : 'Guies de Wikivoyages' , 'wikisources' : 'Pàgines de Viquitexts' , 'header' : 'Resultats de Wikidata' , 'reasonator' : 'Detalls de l’element a Resonator' },	'cs' : { 'commons_cat' : 'Kategorie na Wikimedia Commons' , 'wikipedias' : 'Články na Wikipedii' , 'header' : 'Výsledky vyhledávání na Wikidatech' , 'reasonator' : 'Zobrazit podrobnosti nástrojem Reasonator' },	'de' : { 'commons_cat' : 'Kategorie auf Commons' , 'wikipedias' : 'Wikipedia-Artikel' , 'wikivoyages' : 'Wikivoyage-Reiseführer' , 'wikisources' : 'Wikisource-Artikel' , 'header' : 'Wikidata-Suchergebnisse' , 'reasonator' : 'Zeige die Eigenschaften auf Reasonator' },	'el' : { 'commons_cat' : 'Κατηγορία στα Commons' , 'wikipedias' : 'Λήμματα στη Βικιπαίδεια' , 'header' : 'Αποτελέσματα αναζήτησης στα Wikidata' },	'eo' : { 'commons_cat' : 'Komuneja kategorio' , 'wikipedias' : 'Vikipediaj artikoloj' , 'header' : 'Serĉorezultoj de Vikidatumoj' , 'reasonator' : 'Montri detalojn en Reasonator' },	'es' : { 'commons_cat' : 'Categoría en Commons' , 'wikipedias' : 'Artículos en Wikipedia' , 'header' : 'Resultados de la búsqueda en Wikidata' , 'reasonator' : 'Mostrar los detalles en Reasonator' },	'eu' : { 'commons_cat' : 'Commonseko kategoria' , 'wikipedias' : 'Wikipediako artikuluak' , 'header' : 'Wikidatako bilaketaren emaitzak' , 'reasonator' : 'Erakutsi Reasonatorreko xehetasunak' },	'fa' : { 'commons_cat' : 'رده انبار' , 'wikipedias' : 'مقاله ویکی‌پدیا' , 'wikivoyages' : 'راهنما در ویکی‌سفر' , 'wikisources' : 'صفحه در ویکی‌نبشته' , 'header' : 'نتیجه جستجو در ویکی‌داده' , 'reasonator' : 'اطلاعات بیشتر در مورد این آیتم در ریزنیتور' },	'fr' : { 'commons_cat' : 'Catégorie sur Commons' , 'wikipedias' : 'Articles sur Wikipédia' , 'header' : 'Résultats sur Wikidata' },	'gu' : { 'commons_cat' : 'કોમન્સ કેટેગરી' , 'wikipedias' : 'વિકિપીડિયાના લેખો' , 'header' : 'વિકિડેટા શોધ પરિણામો' , 'reasonator' : 'રિઝોનેટર પર આઇટમની વિગતો બતાવો' },	'he' : { 'commons_cat': 'קטגוריית ויקישיתוף', 'wikipedias': 'ערכים בוויקיפדיה', 'header': 'תוצאות חיפוש בוויקינתונים' },	'hu' : { 'commons_cat' : 'Commons-kategória' , 'wikipedias' : 'Wikipédia-szócikkek' , 'wikisources' : 'Wikiforrás-lapok' , 'header' : 'Wikidata keresési eredmények' },	'hy' : { 'commons_cat' : 'Վիքիպահեստի կատեգորիա' , 'wikipedias' : 'Վիքիպեդիայի հոդվածներ' , 'wikivoyages' : 'Ճամփորդական ուղեցույց Վիքիճամփորդում' , 'wikisources' : 'Վիքիդարանի էջեր' , 'header' : 'Վիդիտվյալներում որոնման արդյունք' , 'reasonator' : 'Ցուցադրել Վիքիտվյալների տարրը Reasonator-ում' },	'id' : { 'commons_cat' : 'Kategori Commons' , 'wikipedias' : 'Artikel Wikipedia' , 'header' : 'Hasil pencarian Wikidata' , 'reasonator' : 'Tunjukkan detil item di Reasonator' },	'ilo' : { 'commons_cat' : 'Kategoria ti Commons' , 'wikipedias' : 'Dagiti artikulo ti Wikipedia' , 'header' : 'Dagiti resulta ti panagbiruk iti Wikidata' , 'reasonator' : 'Ipakita dagiti salaysay ti banag iti Reasonator' },	'it' : { 'commons_cat' : 'Categoria in Commons' , 'wikipedias' : 'Voci di Wikipedia' , 'wikivoyages' : 'Guide turistiche di Wikivoyage' , 'wikisources' : 'Pagine di Wikisource' , 'header' : 'Risultati da Wikidata' , 'reasonator' : 'Mostra dettagli dell\'elemento su Reasonator', 'search' : 'Ricerca completa' },	'ja' : { 'commons_cat' : 'コモンズのカテゴリ' , 'wikipedias' : 'ウィキペディアの記事' , 'wikivoyages' : 'Wikivoyage の旅行ガイド' , 'wikisources' : 'ウィキソースのページ' , 'header' : 'ウィキデータの検索結果' , 'reasonator' : 'Reasonator で項目の詳細を見る' },	'kk' : { 'commons_cat' : 'Ортаққордағы санаты' , 'wikipedias' : 'Уикипедиядағы мақаласы' , 'header' : 'Уикидеректегі іздеу нәтижелері' , 'reasonator' : 'Reasonator арқылы толығырақ қарау' },	'min' : { 'commons_cat' : 'Kategori Commons' , 'wikipedias' : 'Laman Wikipedia' , 'wikivoyages' : 'Laman Wikivoyage' , 'wikisources' : 'Laman Wikisource' , 'header' : 'Hasil pancarian di Wikidata' , 'reasonator' : 'Caliak labiah jaleh di Reasonator' },	'nb' : { 'commons_cat' : 'Commons-kategori' , 'wikipedias' : 'Wikipedia-artikler' , 'wikivoyages' : 'Wikivoyage-sider' , 'wikisources' : 'Wikikilden-sider' , 'header' : 'Søkeresultater fra Wikidata' , 'reasonator' : 'Vis detaljer om elementet i Reasonator' },	'nn' : { 'commons_cat' : 'Commons-kategori' , 'wikipedias' : 'Wikipedia-artiklar' , 'wikivoyages' : 'Wikivoyage-sider' , 'wikisources' : 'Wikikilden-sider' , 'header' : 'Søkjeresultat frå Wikidata' , 'reasonator' : 'Syn detaljar om elementet i Reasonator' },	'pl' : { 'commons_cat' : 'Kategoria na Commons' , 'wikipedias' : 'Artykuły w Wikipedii', 'header' : 'Wyniki wyszukiwania w Wikidata' , 'reasonator' : 'Pokaż szczegóły w Reasonatorze' },	'pt' : { 'commons_cat' : 'Categoria no Commons' , 'wikipedias' : 'Artigos da Wikipédia' , 'header' : 'Resultados da busca no Wikidata' },	'pt-br' : { 'commons_cat' : 'Categoria no Commons' , 'wikipedias' : 'Artigos da Wikipédia' , 'header' : 'Resultados da busca no Wikidata' },	'nl' : { 'commons_cat' : 'Commons-categorie' , 'wikipedias' : 'Wikipedia-artikelen' , 'wikivoyages' : 'Wikivoyage-reisgidsen' , 'wikisources' : 'Wikisource-pagina\'s' , 'header' : 'Wikidata-zoekresultaten' , 'reasonator' : 'Bekijk itemgegevens op Reasonator' },	'ru' : { 'commons_cat' : 'Категория Викисклада' , 'wikipedias' : 'Статьи Википедии' , 'header' : 'Результаты поиска в Викиданных' , 'reasonator' : 'Посмотреть подробности через Reasonator' },	'sk' : { 'commons_cat' : 'Kategória na Commons' , 'wikipedias' : 'Články na Wikipédii' , 'header' : 'Výsledky hľadania na Wikiúdajoch' , 'reasonator' : 'Zobraziť podrobnosti v Reasonatore' },	'sv' : { 'commons_cat' : 'Kategorier på Commons' , 'wikipedias' : 'Wikipediaartiklar' , 'header' : 'Sökresultat från Wikidata' },	'udm' : { 'commons_cat' :	'Викискладысь категория' , 'wikipedias' : 'Википедиысь статьяос' , 'header' : 'Викиданнойёсысь утчанлэн йылпумъянъёсыз' , 'reasonator' : 'Тыро-пыдогес учконо Reasonator пыр' },	'ur' : { 'commons_cat' : 'کومنز زمرہ' , 'wikipedias' : 'ویکیپیڈیا مضامین' , 'wikivoyages' : 'سفری رہنما برائے ویکی سفر' , 'wikisources' : 'ویکی ماخذ صفحات' , 'header' : 'ویکی ڈیٹا میں نتیجہ تلاش' , 'reasonator' : 'ریزونیٹر میں آئٹم کی تفصیلات دکھائیں' },	'vi' : { 'commons_cat' : 'Thể loại Commons' , 'wikipedias' : 'Bài viết Wikipedia' , 'wikivoyages' : 'Bài viết Wikivoyage' , 'header' : 'Kết quả tìm kiếm Wikidata' , 'reasonator' : 'Xem chi tiết khoản mục trên Reasonator' },	'zh' : { 'commons_cat' : '维基共享资源类别' , 'wikipedias' : '维基百科文章' , 'header' : '维基数据搜索结果' , 'reasonator' : '上Reasonator显示项目的详细信息' } };

var mode = 'searchresults'; var i18n_lang = mw.config.get( 'wgUserLanguage' ); var api = '//www.wikidata.org/w/api.php?callback=?' ;

mw.log( 'Initiating WDsearch' ) ; if ( undefined === i18n[i18n_lang] ) i18n_lang = 'en' ; // Fallback if ( mw.config.get( 'wgCanonicalSpecialPageName' ) !== 'Search' && mw.config.get( 'wgArticleId' ) !== 0 ) return;

$(document).ready ( function {	var results = $('div.searchresults') ;	if ( results.length === 0 ) {		mode = 'noarticletext' ;		results = $('div.noarticletext table') ;	}	if ( results.length === 0 ) return ; // No search results, no search page. Bye.

mw.log( 'Preparing WDsearch' ) ; mw.loader.load( '//en.wikipedia.org/w/index.php?title=MediaWiki:Wdsearch-autodesc.js&action=raw&ctype=text/javascript' );

function run {

mw.log( 'Trying to run WDsearch' );

if ( typeof wd_auto_desc === 'undefined' ) { // Wait until the above autodesc script has loaded setTimeout ( run, 100 ) ; return ; }

mw.log( 'Running WDsearch' ) ;

wd_auto_desc.lang = i18n_lang;

var query ; if ( mode == 'searchresults' ) { query = $('#powerSearchText').val ; if ( $('#powerSearchText').length === 0 ) query = $('#searchText input[name="search"]').val ; } else if ( mode == 'noarticletext' ) query = mw.config.get( 'wgPageName' );

mw.log ( 'Using mode ' + mode + ' and query :' + query ) ;

$.getJSON ( api, {			action:'query',			list:'search',			srsearch:query,			srlimit:(typeof wdsearch_results === 'undefined'?10:wdsearch_results),			srnamespace:0,			format:'json'		} , function (d) {			mw.log(d);			if ( undefined === d.query || undefined === d.query.search || d.query.search.length === 0 ) return ; // No result

var ids = [] ; var q = [] ; var h = '' ; h += ' ' ; h += i18n[i18n_lang].header ; h += ' ' ; if ( undefined !== i18n[i18n_lang].search ) { h += ' ' + i18n[i18n_lang].search + ' ' ; }			h += ' ' ; h += ' ' ;

if ( mode == 'searchresults' ) { $('#mw-content-text').append ( h ) ; } else if ( mode == 'noarticletext' ) { $('div.noarticletext').after ( h ) ; }

if ( ids.length === 0 ) return ;

$.getJSON ( api, {				action:'wbgetentities',				ids:ids.join('|'),				format:'json',				languages:i18n_lang,				languagefallback:1			} , function ( d ) {				var h;				if ( d === undefined || d.entities === undefined ) return ; // Some error				$.each ( d.entities , function ( q , v ) {

if ( v.claims && undefined !== v.claims.P373 ) { // Commons cat var cat = v.claims.P373[0].mainsnak.datavalue.value ; h = ' ' ; $('#'+q+' span.commonscat').html ( h ) ; }

if ( undefined !== v.labels && undefined !== v.labels[i18n_lang] ) { // Label h = v.labels[i18n_lang].value ; $('#'+q+' a.wd_title').text ( h ) ; }

if ( undefined !== v.descriptions && undefined !== v.descriptions[i18n_lang] ) { // Manual desc h = '; ' + v.descriptions[i18n_lang].value ; $('#'+q+' span.wd_manual_desc').text ( h ) ; }

if ( undefined !== v.sitelinks ) { // Wikipedia links var wikis = { wikipedia:[], wikivoyage:[] , wikisource:[] } ; $.each ( v.sitelinks, function ( site , v2 ) {							var m = site.match ( /^(.+)wiki$/ ) ;							if ( null !== m ) {								wikis.wikipedia.push ( { site:site , title:v2.title , url:'//'+m[1]+'.wikipedia.org/wiki/'+mw.util.wikiUrlencode(v2.title) } ) ;								return ;							}							m = site.match ( /^(.+)wikivoyage$/ ) ;							if ( null !== m  ) {								wikis.wikivoyage.push ( { site:site , title:v2.title , url:'//'+m[1]+'.wikivoyage.org/wiki/'+mw.util.wikiUrlencode(v2.title) } ) ;								return ;							}							m = site.match ( /^(.+)wikisource$/ ) ;							if ( null !== m  ) {								wikis.wikisource.push ( { site:site , title:v2.title , url:'//'+m[1]+'.wikisource.org/wiki/'+mw.util.wikiUrlencode(v2.title) } ) ;								return ;							}						} ) ; var icons = { wikipedia:'https://upload.wikimedia.org/wikipedia/commons/thumb/8/80/Wikipedia-logo-v2.svg/14px-Wikipedia-logo-v2.svg.png' , wikivoyage:'https://upload.wikimedia.org/wikipedia/commons/thumb/8/8a/Wikivoyage-logo.svg/14px-Wikivoyage-logo.svg.png' , wikisource:'https://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Wikisource-logo.svg/14px-Wikisource-logo.svg.png' } ;						$.each ( [ 'wikipedia', 'wikivoyage' , 'wikisource' ] , function ( k0 , v0 ) {							if ( wikis[v0].length > 0 ) {								var link_title = i18n[i18n_lang][v0+'s'] || v0 ;								h = ' ' ;								$('#'+q+' span.'+v0).html ( h ) ;								$('#'+q+' span.'+v0+' a').click ( function { var did = 'wdsearch_dialog_'+v0 ; $('#'+did).remove ; // Cleanup h = ' ' ; h += ' ' ; h += ' ' ; $('#wdsearch_container').prepend ( h ) ; $('#'+did).dialog ( {										modal:true									} ); return false ; } ) ;							}						} ) ;					}

} ) ;			} ) ;

var the_project = mw.config.get( 'wgSiteName' ).toLowerCase ; if ( the_project == 'wikimedia commons' ) the_project = 'wikipedia' ; $.each ( q, function ( k , v ) {				wd_auto_desc.loadItem ( v , { target:$('#'+v+' span.wd_desc') , links : the_project , //					callback : function ( q, html , opt ) { mw.log ( q + ' : ' + html ) } , //					linktarget : '_blank' } ) ;			});

});	}

mw.loader.using( ['mediawiki.util', 'jquery.ui'], run ); });

} )( jQuery, mediaWiki );