MediaWiki:SearchTranslation.js

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search
Note: After saving, you have to bypass your browser's cache to see the changes. Internet Explorer: press Ctrl-F5, Mozilla: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Opera/Konqueror: press F5, Safari: hold down Shift + Alt while clicking Reload, Chrome: hold down Shift while clicking Reload.
$(document).ready(function(){
  if ( mw.config.get('wgPageName') != "Special:Search" ) return ;
  if(typeof $ == 'undefined' && typeof jQuery == 'function'){ $ = jQuery; }
  
  // Auto-detect language by words
  var lang = new Array ( "ar","bg","ca","zh","hr","cs","da","nl","tl","fi","fr","de","el","hi","id","it","ja","ko","lv","lt","no","pl","pt","ro","ru","sr","sk","sl","es","sv","uk","vi" ) ;
//  var lang = new Array ( "de","fr","es" ) ;
  var query = $('#powerSearchText').val() ;
  if ( query == "" ) return ;
  var words = query.split(" ") ;
  words.push ( query ) ;
  var title_string = words.join ( "|" ) ;
  var found_pages = new Array () ;
  var found_lang = 0 ;
  $.each ( lang , function (i,l) {
    var url = "https://"+l+".wikipedia.org/w/api.php?action=query&rawcontinue=&prop=info&format=json&titles=" + escape(title_string) + "&callback=?" ;
    $.getJSON ( url , function (json) {
      found_pages[l] = 0 ;
      $.each(json.query.pages,function (j,p) {
        if ( parseInt(j) <= 0 ) return ;
        found_pages[l]++ ;
      } ) ;
      found_lang++ ;
      if ( found_lang == lang.length ) check_results () ;
    } ) ;
  } ) ;

  function check_results () {
    var best_lang = '?' ;
    var best_cnt = 0 ;
    for ( var l in found_pages ) {
      var cnt = found_pages[l] ;
      if ( best_cnt > cnt ) continue ;
      best_lang = l ;
      best_cnt = cnt ;
    }
    if ( best_cnt == 0 ) return ; // No possible language found
    var url = "http://toolserver.org/~nikola/mis.php?uselang="+best_lang+"&search="+escape(query) ;
    $('#mw-search-top-table').append ( "<a href=\""+url+"\">Search " + best_lang + " &rarr; en" ) ;
  }
});