User:Sgeo/monobook.js (toolbox links)
Appearance
function addlink(name, url) {
var na = document.createElement('a'); na.setAttribute('href', '/wiki/' + url); var txt = document.createTextNode(name); na.appendChild(txt); var nli = document.createElement('li'); nli.setAttribute('class', 'p-newlinks'); nli.appendChild(na); return nli;
}
function morelinks() {
var ndivportlet = document.createElement('div'); var ndivpbody = document.createElement('div'); var colone = document.getElementById('column-one'); ndivportlet.setAttribute('class', 'portlet'); ndivportlet.setAttribute('id', 'p-newlinks'); ndivpbody.setAttribute('class', 'pBody'); var nul = document.createElement('ul'); nul.setAttribute('id', 'p-newlinks'); nul.appendChild(addlink('RfA', 'WP:RFA')); nul.appendChild(addlink('VfD', 'WP:VFD')); nul.appendChild(addlink('FAC', 'WP:FAC')); nul.appendChild(addlink('RfC', 'WP:RFC')); nul.appendChild(addlink('RfAr', 'WP:RFAR')); nul.appendChild(addlink('MoS', 'WP:MOS')); nul.appendChild(addlink('ViP', 'WP:VIP')); nul.appendChild(addlink('VP', 'WP:VP'));
var title=document.createElement('h5'); title.appendChild(document.createTextNode('Shortcuts')); ndivportlet.appendChild(title); ndivpbody.appendChild(nul); ndivportlet.appendChild(ndivpbody); colone.appendChild(ndivportlet);
}
function do_onload() {
morelinks();
}
if (window.addEventListener)
window.addEventListener("load", do_onload, false);
else if (window.attachEvent)
window.attachEvent("onload", do_onload);
// Milliseconds before fetching results var typePause = 500;
var xmlHttp = (window.XMLHttpRequest) ? new XMLHttpRequest : new ActiveXObject("Microsoft.XMLHTTP"); var searchCache = {}; var searchStr; var searchEl; var searchTimeout; var resultCount; var resultsEl;
function getResults() {
var encStr = escape(searchStr.replace(/ /g, '_')); xmlHttp.open("GET", "http://en.wikipedia.org/wiki/Special:Search?gen=titlematch&ns0=0&limit=10&search=" + encStr, true); xmlHttp.onreadystatechange = parseResults; xmlHttp.send(null);
}
function parseResults() {
if (xmlHttp.readyState > 3) { var resultArr = xmlHttp.responseText.replace(/^$/gm, ).split("\n"); searchCache[searchStr.toLowerCase()] = resultArr; showResults(resultArr); }
}
function showResults(resultArr) {
var returnStr = ""; var resultsEl = searchEl.suggestList;
if (resultArr.length < 2) resultsEl.style.display = "none"; else { resultsEl.innerHTML = "";
for (var i=0; i < resultArr.length-1; i++) { var linkEl = document.createElement("a"); linkEl.style.display = "block"; linkEl.style.position = "relative"; linkEl.style.textDecoration = "none"; linkEl.style.color = "WindowText"; linkEl.style.padding = "1px 3px"; linkEl.href = "/wiki/" + resultArr[i]; linkEl.onmouseover = function(e) { var srcEl = e ? e.target : event.srcElement; srcEl.style.backgroundColor = "Highlight"; srcEl.style.color = "HighlightText"; } linkEl.onmouseout = function(e) { var srcEl = e ? e.target : event.srcElement; srcEl.style.backgroundColor = "Window"; srcEl.style.color = "WindowText"; }
if (resultsEl.curSel == i) { linkEl.style.backgroundColor = "Highlight"; linkEl.style.color = "HighlightText"; }
var textEl = document.createTextNode(resultArr[i].replace(/_/g, ' '));
var listItemEl = document.createElement("li"); listItemEl.style.padding = 0; listItemEl.style.margin = 0;
listItemEl.appendChild(linkEl); linkEl.appendChild(textEl); resultsEl.appendChild(listItemEl); }
var offLeft = 0; var offTop = 0; var offEl = searchEl;
for (; offEl && offEl != document.documentElement; offEl = offEl.offsetParent) { offTop += offEl.offsetTop; offLeft += offEl.offsetLeft; }
resultsEl.style.left = offLeft + "px"; resultsEl.style.top = offTop + searchEl.offsetHeight + "px"; resultsEl.style.position = "absolute"; resultsEl.style.display = "block";
searchEl.onblur = function() { setTimeout(function() { searchEl.suggestList.style.display = "none"; //searchEl.suggestList.parentNode.style.position = "static"; }, 1000); } }
// set width, top, left
}
function resultType() {
if (!searchEl) return;
searchStr = searchEl.value; if (searchTimeout) clearTimeout(searchTimeout);
if (searchStr != "") { if (searchCache[searchStr.toLowerCase()]) showResults(searchCache[searchStr.toLowerCase()]) else searchTimeout = setTimeout(getResults, typePause); } else { searchEl.suggestList.style.display = "none"; }
}
document.onkeyup = function(e) {
var srcEl = e ? e.target : event.srcElement;
if (srcEl.tagName.toLowerCase() == "input" && srcEl.name == "search" && srcEl.type == "text") { if (!srcEl.wikiTransform) { srcEl.autocomplete = "off"; srcEl.wikiTransform = true;
var listEl = document.createElement("ul"); listEl.style.margin = 0; listEl.style.padding = 0; listEl.style.listStyleType = "none"; listEl.style.listStyleImage = "none"; listEl.style.display = "none"; listEl.style.position = "absolute"; listEl.style.border = "1px solid #000"; listEl.style.font = "menu"; listEl.style.color = "WindowText"; listEl.style.whiteSpace = "nowrap"; listEl.style.cursor = "default"; listEl.style.backgroundColor = "window"; listEl.style.zIndex = 500; listEl.curSel = -1;
document.body.appendChild(listEl); //srcEl.parentNode.insertBefore(listEl, srcEl.nextSibling); srcEl.suggestList = listEl; /*var posEl = document.createElement("div"); posEl.style.position = "relative"; posEl.appendChild(srcEl); srcEl.parentNode.replaceChild(posEl, srcEl);*/ }
searchEl = srcEl; resultType(); }
}
document.onkeydown = function(e) {
var srcEl = e ? e.target : event.srcElement; var keyCode = e ? e.charCode : event.keyCode;
if (srcEl.tagName.toLowerCase() == "input" && srcEl.name == "search" && srcEl.type == "text") { switch (keyCode) { case 40 : // down
var allLinks = srcEl.suggestList.getElementsByTagName("a");
if (srcEl.suggestList.curSel < 0) { srcEl.suggestList.curSel = 0; allLinks[0].style.backgroundColor = "Highlight"; allLinks[0].style.color = "HighlightText"; break; } else if (srcEl.suggestList.curSel + 1 < allLinks.length) { allLinks[srcEl.suggestList.curSel].style.backgroundColor = ""; allLinks[srcEl.suggestList.curSel].style.color = ""; allLinks[++srcEl.suggestList.curSel].style.backgroundColor = "Highlight"; allLinks[srcEl.suggestList.curSel].style.color = "HighlightText"; }
break; case 38 : // up
var allLinks = srcEl.suggestList.getElementsByTagName("a");
if (srcEl.suggestList.curSel < 0) { srcEl.suggestList.curSel = allLinks.length - 1; allLinks[allLinks.length - 1].style.backgroundColor = "Highlight"; allLinks[allLinks.length - 1].style.color = "HighlightText"; break; } else if (srcEl.suggestList.curSel - 1 >= 0) { allLinks[srcEl.suggestList.curSel].style.backgroundColor = ""; allLinks[--srcEl.suggestList.curSel].style.backgroundColor = "Highlight"; allLinks[srcEl.suggestList.curSel].style.color = "HighlightText"; }
break;
case 13 : // return
var allLinks = srcEl.suggestList.getElementsByTagName("a");
if (srcEl.suggestList.curSel > -1) srcEl.value = allLinks[srcEl.suggestList.curSel].firstChild.nodeValue;
case 37 : // left break; case 39 : // right break; } }
}