Wikisłownikarz:Sp5uhe/skrypt05.js
Uwaga: aby zobaczyć zmiany po opublikowaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.
- Firefox / Safari: Przytrzymaj Shift podczas klikania Odśwież bieżącą stronę, lub naciśnij klawisze Ctrl+F5, lub Ctrl+R (⌘-R na komputerze Mac)
- Google Chrome: Naciśnij Ctrl-Shift-R (⌘-Shift-R na komputerze Mac)
- Internet Explorer / Edge: Przytrzymaj Ctrl, jednocześnie klikając Odśwież, lub naciśnij klawisze Ctrl+F5
- Opera: Naciśnij klawisze Ctrl+F5.
//from http://www.json.org/json.js and [[en:User:Zocky/AutoComplete.js]]
String.prototype.parseJSON = function () {
try {
return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
this.replace(/"(\\.|[^"\\])*"/g, ''))) &&
eval('(' + this + ')');
} catch (e) {
return false;
}
};
function ac$query(cb,what)
{
if (ac$query.arguments.length>1 && ac$x)
{
var i=2;
var url="/w/query.php?format=json&what="+what;
while (i < ac$query.arguments.length)
{
url=url+"&"+ac$query.arguments[i] + "=" + ac$query.arguments[i+1];
i+=2;
}
ac$x.onreadystatechange=function()
{
try{
if (ac$x.readyState==4)
return ac$x.status==200
? cb(JSON.parse(ac$x.responseText))
: cb(false);
} catch (e) { }
};
ac$x.open("GET",url,true);
ac$x.setRequestHeader('Accept','text/*');
ac$x.send(null);
}
else return false;
}
// helper functions
function ac$$e(id) { return document.getElementById(id); }
function ac$$c(name,id) { var el=document.createElement(name); el.id=id; return el };
function ac$$ia(node,newnode) { node.parentNode.insertBefore(newnode,node.nextSibling); }
function ac$inputKeyDown(e)
{
var k = 0;
try {
k = e.which ? e.which : 0;
} catch(e) {
k = e.keyCode ? e.keyCode : 0;
}
if ((k==40) && ac$b.style.visibility=="visible")
{
ac$b.focus();
}
else
{
try {clearTimeout(ac$t)} catch (e) {};
ac$t=setTimeout("ac$timeOut()",500)
}
}
function ac$boxKeyPress(e)
{
var k = 0;
try {
k = e.which ? e.which : 0;
} catch(e) {
k = e.keyCode ? e.keyCode : 0;
}
if (k==13)
{
ac$s.value=ac$b.options[ac$b.selectedIndex].value;
ac$b.style.visibility="hidden";
ac$b.selectedIndex=-1;
ac$s.focus();
}
else if (k==27)
{
ac$b.style.visibility="hidden";
ac$b.selectedIndex=-1;
ac$s.focus();
}
else if (k)
{
ac$s.value+=String.fromCharCode(k);
ac$s.focus();
ac$b.selectedIndex=-1;
ac$s.selectionStart=ac$s.selectionEnd=ac$s.value.length;
try {clearTimeout(ac$t)} catch (e) {};
ac$t=setTimeout("ac$timeOut()",500)
}
e.preventDefault();
}
function ac$boxClick(e)
{
ac$s.value=ac$b.options[ac$b.selectedIndex].value;
ac$b.style.visibility="hidden";
ac$b.selectedIndex=-1;
ac$s.focus();
}
function ac$blur(e)
{
try {
if (e.target==ac$b)
{
if (ac$b.style.visibility=="hidden") ac$b.blur()
}
else if (e.target!=ac$s && e.target!=document && e.target!=window)
{
ac$b.style.visibility="hidden";
ac$b.selectedIndex=-1;
}
} catch (e) { }
}
function ac$timeOut()
{
if (ac$s.value.length>0)
{
try {ac$x.abort()} catch(e){};
cb=function(obj)
{
ac$b.innerHTML='';
for (var i in obj.meta.namespaces)
{
try {
var ns=obj.meta.namespaces[i]['*'];
ac$n[ns]=i;
if (ac$s.value.toUpperCase() == ns.substring(0,ac$s.value.length).toUpperCase())
{
ac$b.innerHTML+='<option style="font-weight:bold">'
+ ns
+ ':</option>';
}
} catch(e){}
}
for (var i in obj.pages)
{
if (ac$s.value.toUpperCase() == obj.pages[i].title.substring(0,ac$s.value.length).toUpperCase())
ac$b.innerHTML+= (obj.pages[i].redirect!=""
? '<option>'
: '<option style="color:silver">')
+ obj.pages[i].title
+ '</option>';
}
if (!ac$b.options.length)
ac$b.innerHTML='<option value="'+ac$s.value+'" style="color:silver">(nie znaleziono)</option>';
ac$b.style.visibility="visible";
}
var ns=ac$s.value.match(/^.*?(?=:)/);
if (ns in ac$n)
{
var apns = ac$n[ns];
var apfrom = ac$s.value.replace(/^.*?:/,'');
}
else
{
var apns=0;
var apfrom=ac$s.value;
}
ac$query(cb,"allpages|namespaces","apfrom",apfrom.replace(/ /g,'_'),"aplimit","50","apnamespace",apns);
}
else
{
ac$b.style.visibility="hidden";
}
}
// initialization
var ac$s;
var ac$b;
var ac$t;
var ac$n=[];
var ac$x = window.XMLHttpRequest ? new XMLHttpRequest()
: window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP")
: false;
function ac$init()
{
ac$s=ac$$e("searchInput");
if(ac$s)
{
ac$b=ac$$c('select','autocompletebox');
ac$b.size=8;
ac$b.style.visibility="hidden";
ac$$ia(ac$s,ac$b);
ac$s.setAttribute('autocomplete','off');
if (document.addEventListener)
{
ac$s.addEventListener('keydown',ac$inputKeyDown,false);
ac$b.addEventListener('keypress',ac$boxKeyPress,false);
ac$b.addEventListener('click',ac$boxClick,false);
document.addEventListener('focus',ac$blur,false);
}
else if (document.attachEvent)
{
ac$s.attachEvent('onkeydown',ac$inputKeyDown);
ac$b.attachEvent('onkeypress',ac$boxKeyPress);
ac$b.attachEvent('onclick',ac$boxClick);
document.attachEvent('onfocus',ac$blur);
/* }
else
{
// Dla IE, ale w IE nie udało mi się poprawić wyświetlania okienka z listą
ac$s.onkeydown = ac$inputKeyDown;
ac$b.onkeypress = ac$boxKeyPress;
ac$b.onclick = ac$boxClick;
document.onfocus = ac$blur;*/
}
}
}
$(ac$init);