Ескерту: Сақтағаннан кейін өзгерістерді көру үшін браузеріңіздің бүркемесін (кэшін) тазарту керек болуы мүмкін.

  • Firefox / Safari: Қайта жүктеуді нұқығанда  Shift пернесін басып тұрыңыз немесе Ctrl+F5 не Ctrl+ Shift+R екеуінің біреуін басыңыз
    (Mac — +R)
  • Google Chrome: Ctrl+ Shift+R басыңыз (Mac — + Shift+R)
  • Internet Explorer: Жаңарту батырмасын нұқығанда Ctrl пернесін басып тұрыңыз немесе Ctrl+F5 басыңыз, не F5 пернесін басыңыз
  • Opera: Құралдар → Бапталымдар дегеннен бүркемесін тазарту керек.
function wgImg(img){
 return /^https:/i.test(img) ? img : 'https://upload.wikimedia.org/wikipedia/'+img 
} 

var _cnt
if ($.wikiEditor){
 appendCSS('#local-toolbar {height:26px; border-right:1px solid #ddd;\
  margin:3px; padding-right:6px} #local-toolbar img {padding:2px}')
  _cnt = '#wikiEditor-ui-toolbar'
}else if (document.getElementById('toolbar')){
  _cnt = '#toolbar'
  importMW('ToolbarOld')
}else{ //no toolbar
  _cnt = '#editform'
  appendCSS('#local-toolbar img {border:1px outset gray; background:#ddd; margin:2px; height:22px}')
}
 
$(function(){
 //attach local toolbar 
 $('<div id=local-toolbar style="float:left" />')
 .prependTo(_cnt)
 //attach local buttons
 for (var id in mwCustomEditButtons){
   var b = mwCustomEditButtons[id]
   if (!b.length) continue
     attachFuncBtn(id, b[0], b[1], b[2])
 }  
})

function attachFuncBtn(id, func, img, tip){
 $('<img id="'+id+'" src="'+wgImg(img)+'" style="cursor:pointer" '
     +'title="'+tip+'" alt="'+tip.substr(0,3)+'" />')
  .appendTo('#local-toolbar')
  .click(func)
}
 
function addFuncBtn(id, func, img, tip){
 if (document.getElementById('local-toolbar'))
   attachFuncBtn(id, func, img, tip)
 else   
   mwCustomEditButtons[id] = [func, img, tip]
}

if (/edit|submit/.test(wgAction)){
  mwCustomEditButtons['wikilinker'] = [WikiLinker, 'commons/b/bd/Wikilinker.png', 'Уики сілтеме']
  importScript('Қатысушы:Bolatbek/stemmer.js')
}

function stemPhrase(phrase) {
   phrase=phrase.substr(0,100);

   phrase=phrase.replace(/\s/g, " ");
   phrase=phrase.replace(/—/g, " ");
   phrase=phrase.replace(/»/g, "");
   phrase=phrase.replace(/«/g, "");
   phrase=phrase.replace(/\%/g, "");
   phrase=phrase.replace(/\'/g, "");
   phrase=phrase.replace(/\"/g, "");
   phrase=phrase.replace(/_/g, " ");
   phrase=phrase.replace(/\!/g, " ");
   phrase=phrase.replace(/\?/g, " ");
   phrase=phrase.replace(/\./g, " ");
   phrase=phrase.replace(/\,/g, " ");
   phrase=phrase.replace(/\:/g, " ");
   phrase=phrase.replace(/\s+/g, " ");

   var rustemmer = new RussianStemmer();

   var arr = phrase.split(' ')
   var res = '';
   var next_res = '';

   var n = 0;

   for (var i in arr) {
      rustemmer.setCurrent(arr[i]);
      rustemmer.stem();
      next_res = rustemmer.getCurrent();
      if (next_res.length > 0) {
        if (next_res != arr[i] && n < 3) {
           res += next_res + '* ';
           n++; 
        }
        else {
           res += next_res + ' ';
        }
      }
   }

   // trim string
   res = res.replace(/(^\s+)|(\s+$)/g, "");

   return res;
}

function WikiLinker() {

    var xmlhttp;
    var prepWin;

    var CantWork = 'Бірінші сөзді белгілеу қажет';
    var range;
    var browserType = 0;

    var requestLength = 0; 

    var txt = '';
    var wpTextbox1 = document.editform.wpTextbox1;

    var winScroll = document.documentElement.scrollTop;

    wpTextbox1.focus();

    if (typeof wpTextbox1.selectionStart != 'undefined' && (navigator.productSub > 20031000 || is_safari || is_opera)) { //Mozilla/Opera/Safari3
        browserType = 1;

        var textScroll = wpTextbox1.scrollTop;
        var startPos = wpTextbox1.selectionStart;
        var endPos = wpTextbox1.selectionEnd;
        txt = wpTextbox1.value.substring(startPos, endPos);

        // отсекаем последний пробел
        if (txt.slice(-1) == ' ') {
           txt = txt.slice(0,-1);
           endPos = endPos - 1;
        }

        if (txt == '') {
            alert(CantWork);
        }
        else {
            processText();
        }
        wpTextbox1.selectionStart = startPos;
        wpTextbox1.selectionEnd = startPos + txt.length;
        wpTextbox1.scrollTop = textScroll;
    } else if (document.selection && document.selection.createRange) { //IE
        browserType = 2;

        range = document.selection.createRange();
        txt = range.text;

        
        if (txt.slice(-1) == ' ') {
           txt = txt.slice(0,-1);
           range.moveEnd('character', -1);
        }

        if (txt == '') {
            alert(CantWork);
        }
        else {
            processText();
        }
    } else { // other browsers
        alert(CantWork);
    }

    document.documentElement.scrollTop = winScroll // scroll back, for IE/Opera

    function processText() {
        var preparedText = stemPhrase(txt);

        requestLength = preparedText.split(' ').length;

        loadXMLDoc(mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?action=query&list=search&srlimit=5&srprop=&srredirects=1&format=json&srsearch=' + preparedText);
    }

    function loadXMLDoc(url) {
        xmlhttp = GetXmlHttpObject();
        if (xmlhttp == null) {
            alert("Your browser does not support XMLHTTP!");
            return;
        }
        xmlhttp.onreadystatechange = stateChanged;
        xmlhttp.open("GET", url, true);
        xmlhttp.send(null);
    }

    function GetXmlHttpObject() {
        if (window.XMLHttpRequest) {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            return new XMLHttpRequest();
        }
        if (window.ActiveXObject) {
            // code for IE6, IE5
            return new ActiveXObject("Microsoft.XMLHTTP");
        }
        return null;
    }

    function compareStringLengths (a, b) {
      a = a.replace(/ \(.*\)/g, "");
      b = b.replace(/ \(.*\)/g, "");

      if ( a.length < b.length ) return -1;
      if ( a.length > b.length ) return 1;
      return 0;
    }

    function initialLower(str) {
       return str.substr(0, 1).toLowerCase() + str.substr(1);
    }

    function stateChanged() {
        if (xmlhttp.readyState == 4) {
            if (xmlhttp.status == 200) {
                var resp = eval('(' + xmlhttp.responseText + ')');
                
                if (typeof resp.query.search[0] != 'undefined') {

                   var page_name = resp.query.search[0].title;

                   if (requestLength == 1) {
                      var resar = [];
                   
                      for (var j=0;j<=4;j++) {
                         if (typeof resp.query.search[j] != 'undefined' && txt.substr(0,3).toLowerCase() == resp.query.search[j].title.substr(0,3).toLowerCase() ) {
                            resar.push(resp.query.search[j].title);
                         }
                      }
                   
                      resar.sort(compareStringLengths);
                   
                      if (typeof resar[0] != 'undefined') {
                         page_name = resar[0]
                      }
                   }

                   if ( initialLower(txt.substr(0, page_name.length)) == initialLower(page_name)  &&  page_name.length <= txt.length) {
                      txt = '[[' + page_name + '|' + txt + ']]'; 
                   }
                   else {
                      txt = '[[' + page_name + '|' + txt + ']]'; 
                   }
                }
                else {
                   txt = '[[' + '|' + txt + ']]';
                }

               if (browserType == 1) { //Mozilla/Opera/Safari3
                   wpTextbox1.value = wpTextbox1.value.substring(0, startPos) + txt + wpTextbox1.value.substring(endPos);

                   wpTextbox1.selectionStart = startPos;
                   wpTextbox1.selectionEnd = startPos + txt.length;
                   wpTextbox1.scrollTop = textScroll;
               } else if (browserType == 2) { //IE
                    range.text = txt;

               } else { // other browsers
                   alert(CantWork);
               }

            }
        }
    }
}