Gebruiker:JePe/searchsuggestions.js

Uit Wikipedia, de vrije encyclopedie

Opmerking: nadat u de wijzigingen hebt gepubliceerd is het wellicht nodig uw browsercache te legen.

  • Firefox / Safari: houd Shift ingedrukt terwijl u op Vernieuwen klikt of druk op Ctrl-F5 of Ctrl-R (⌘-Shift-R op een Mac)
  • Google Chrome: druk op Ctrl-Shift-R (⌘-Shift-R op een Mac)
  • Internet Explorer / Edge: houd Ctrl ingedrukt terwijl u op Vernieuwen klikt of druk op Ctrl-F5
  • Opera: druk op Ctrl-F5.
// <pre>

// (nl) Wanneer er een aantal letters in de zoekbox in de zijbalk
// getypt worden, haalt dit script de eerste tien titels vanaf
// de betreffende letters uit de MediaWiki API en plaatst
// die onder de zoekbox. Dit gebeurt niet meteen na het intypen
// van een letter, maar na een wachttijd van 750 milliseconden 
// na het laatst ingetypte teken. 
//
// (en) When some letters will be typed in the searchbox in the 
// sidebar, this script gets the first ten titles from that 
// letters from the MediaWiki API and places them in the 
// searchbox. This happens not directly after a keypress,
// but after a waitingtime of 750 milliseconds after the
// last keypress.
//
// Auteur/author: nl:User:JePe

function processSuggest()
{
    if (sugApiReq.readyState != 4) return;
    if (sugApiReq.status != 200) return;                              
    var jsonObj = eval("(" + sugApiReq.responseText + ")");  
    var suggestNode = document.createElement("div");
    suggestNode.id = "suggestWords";
    suggestNode.style.textAlign = "left";
    suggestNode.style.marginTop = ".5em";
    suggestNode.style.fontSize = "90%";
    var pageList = jsonObj.query.allpages;
    var x = 0;
    for (i in pageList) {
       if (sugNamespace >= 2 && x == 0) { 
          var suggestHeader = suggestNode.appendChild(document.createElement("div"));
          suggestHeader.style.fontWeight = "bold";
          suggestHeader.style.paddingLeft = ".5em";
          suggestHeader.innerHTML = pageList[i].title.split(":",1) + ":";
       }   
       var suggestLink = suggestNode.appendChild(document.createElement("a"));
       suggestLink.style.display = "block";
       suggestLink.style.padding = ".1em 0 .3em 0";
       suggestLink.style.lineHeight = "1.1em";
       suggestLink.onmouseover = function () {this.style.backgroundColor = "#ddeeff";}
       suggestLink.onmouseout = function () {this.style.backgroundColor = "transparent";}
       if (pageList[i].ns == 0) {
          suggestLink.innerHTML = pageList[i].title;
       } else {
          suggestLink.innerHTML = pageList[i].title.substring(pageList[i].title.indexOf(":")+1,pageList[i].title.length);
       }   
       if (x == 0) { firstWordPrev = suggestLink.innerHTML; x = 1; }
       suggestLink.href = wgServer + pageList[i].title.replace(/([\s\S]+)/,wgArticlePath);
       suggestLink.title = pageList[i].title;
    }   
    if (jsonObj["query-continue"]) {
       var moreLink = suggestNode.appendChild(document.createElement("a"));
       moreLink.style.textAlign = "center";
       moreLink.style.display = "block";
       moreLink.style.fontWeight = "bold";
       moreLink.innerHTML = "Meer...";
       moreLink.href = "javascript:loadSuggestion('"+jsonObj['query-continue'].allpages.apfrom+"')";
       moreLink.title = "Volgende 10 titels";
    }   
    var node = document.getElementById("searchBody");
    var suggestNodeOld = document.getElementById("suggestWords");
    if (suggestNodeOld) suggestNodeOld.parentNode.removeChild(suggestNodeOld);
    node.appendChild(suggestNode);
    suggestionLoading = false;
}    

function loadSuggestion(title)
{
    if (!title) {
       var searchWord = sugSearchText.value;                                                                              
       if (searchWord == searchTextPrev || suggestionLoading == true) return;      
       if (searchWord == "") {
          var suggestNodeOld = document.getElementById("suggestWords");
          if (suggestNodeOld) suggestNodeOld.parentNode.removeChild(suggestNodeOld); 
          return; }
       searchTextPrev = searchWord;                                                                                    
       searchWord = searchWord.charAt(0).toUpperCase() + searchWord.substring(1,searchWord.length);                    
       if (searchWord == firstWordPrev.substring(0,searchWord.length) && searchWord.length >= searchLengthPrev) return;
       searchLengthPrev = searchWord.length;   
    } else {
       var searchWord = title;
    }                                                                           
    suggestionLoading = true;
    if (wgNamespaceNumber <= 0) {
       sugNamespace = 0;
    } else { 
       sugNamespace = Math.round((wgNamespaceNumber / 2) - 0.5) * 2;
    }
    var url = "/w/api.php?action=query&list=allpages&aplimit=10&format=json";
    url += "&apnamespace=" + sugNamespace + "&apfrom=" + escape(searchWord);
    if (window.XMLHttpRequest) { // native XMLHttpRequest 
        sugApiReq = new XMLHttpRequest();
        sugApiReq.onreadystatechange = processSuggest;
        sugApiReq.open("GET", url, true);
        sugApiReq.send(null);
    } else if (window.ActiveXObject) { // activeX version
        sugApiReq = new ActiveXObject("Microsoft.XMLHTTP");
        if (sugApiReq) {
            sugApiReq.onreadystatechange = processSuggest;
            sugApiReq.open("GET", url, true);
            sugApiReq.send("");
        }
    }
}

function suggestWords()
{
   sugSearchText = document.getElementById("searchInput");                                       
   if (sugSearchText) {                                                                           
      sugSearchText.onkeyup = function () { 
      // time to wait after the last keypress before a suggestion is loaded
         clearTimeout(sugWaitTime);
         sugWaitTime = setTimeout("loadSuggestion()",750); 
      }    
   }                                                                                           
}

var sugStartTitle = "";
var sugWaitTime;
var suggestionLoading = false;
var sugNamespace;
var searchTextPrev = "";
var searchLengthPrev = 0;
var firstWordPrev = "";
var sugApiReq;
var sugSearchText;
$(suggestWords);


// </pre>