User:Sgeo/monobook.js (toolbox links)
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;
}
}
}