Участник:Парис "Анима" надаль/search invertkb.js

Материал из Википедии — свободной энциклопедии
/************************************************************
* Добавляет исправление раскладки в каждый результат поиска *
************************************************************/

if( (/^(?:Служебная|Special):(?:Search|Поиск)$/.test(mw.config.get('wgPageName'))) && (document.getElementById('firstHeading').getElementsByTagName('span')[0].innerHTML == 'Результаты поиска') ){
addOnloadHook( function(){
var keytr={};
{
var enkeys="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ[]{};':\",.\/<>?@#\$^&\`~";
var en_keys=Array();
for(var i=0;i<enkeys.length;i++){en_keys[i]=enkeys.charAt(i)};//в MSIE enkeys[i] не пашет
var rukeys="фисвуапршолдьтщзйкыегмцчняФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯхъХЪжэЖЭбю.БЮ,\"№;:?ёЁ";
var ru_keys=Array();
for(var i=0;i<rukeys.length;i++){ru_keys[i]=rukeys.charAt(i)};//в MSIE rukeys[i] не пашет
for(i in ru_keys){keytr[ru_keys[i]]=en_keys[i]};
for(i in en_keys){keytr[en_keys[i]]=ru_keys[i]};
};
var tr = function (s){
    var k='';
    for(var i=0;i<s.length;i++){k+=keytr[s.charAt(i)]||s.charAt(i)}
    return k
};
var form = document.getElementById('search');
var str = document.getElementById('searchText');
var tsf = document.getElementById('searchInput');
if(!/<b[^>]*>\s*Есть страница/i.test(form.nextSibling.firstChild.innerHTML)){//Не найдено такой страницы
    var trsb=document.createElement('p');
    trsb.className = "mw-search-createlink";
    var v=tr(str.value);
    $.ajax({
        type: "GET", // request type ( GET or POST )
        url: mw.util.wikiScript('api'), // the URL to which the request is sent           
        data: { 'action':'query', 'format':'json', 'titles':v.replace(/\|.*$/,'') },
        dataType: 'json', // the type of data that you're expecting back from the server
        success: function( npage ){ //function to be called if the request succeeds
    for(var i in npage.query.pages||npage.query.interwiki){
        if(i>=0){//Есть такая страница, даём ссылку
         var a=(npage.query.pages||npage.query.interwiki)[i].title;
         if(npage.query.interwiki){
         trsb.innerHTML = "<b>Может быть страница в другом разделе: <a href='"+mw.config.get('wgServer')+'/wiki/'+encodeURIComponent(a)+"'></a></b>";
         }else{
         trsb.innerHTML = "<b>Есть страница <a href='"+mw.config.get('wgServer')+'/wiki/'+encodeURIComponent(a)+"'></a></b>";
         };
         with(trsb.lastChild/*b*/.lastChild/*a*/){
           title=a;appendChild(document.createTextNode(v));
         }
        }else{//Нет такой страницы, даём кнопку
        trsb.innerHTML='<button type="submit"></button>';
        with(trsb.firstChild){onclick=function(){str.value=v};appendChild(document.createTextNode('Искать: '+v));};
        }
    };
    form.appendChild(trsb);
    var arw = document.createElement('a');
    arw.onclick=function(){if(str.value==v){
      str.value=arw;tsf.value=arw;
     }else{
      arw=str.value;str.value=v;tsf.value=v;
    }};
    with(arw){innerHTML = " ↑";/*style.color='blue';style.cursor='pointer';*/style.marginLeft='0.3em';title='Подставить в поле поиска'};
    trsb.appendChild(arw);
        }//json fn
    });//ajax
}//if
} )
}