Gebruiker:JePe/searchsuggestions.js
Van Wikipedia
Hulp bij het instellen van uw voorkeuren Let op! Nadat u de veranderingen heeft opgeslagen, moet u de cache van uw browser nog legen om ze daadwerkelijk te zien.
Mozilla (incl. Firefox) | Ctrl+Shift+R |
Internet Explorer | Ctrl+F5 |
Opera | F5 |
Safari | Cmd+R |
Konqueror | 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; addOnloadHook(suggestWords); // </pre>