User:Zocky/CategoryBrowser.js

//{{PAGENAME}}

//

document.write('');

var categoryListViewTop=1;

function categoryListClick(e)

{

var tt=e.target.tagName;

if (e.button==0 && tt=='A')

{

var aaa=$e('categoryArticleView');

aaa.src=e.target.href+'?action=render';

e.preventDefault();

}

}

function categoryTreeClick(e)

{

var tt=e.target.tagName;

if (e.button==0 && tt=='IMG')

{

var lll=e.target; while (lll.tagName!='A') {lll=lll.nextSibling};

var t=lll.innerHTML;

var u=lll.href;

var ccc=$e('Category:'+t);

var sss=$e('Subcategories:'+t);

if (ccc.getAttribute('state')=='+')

{

ccc.setAttribute('state','-');

sss || loadCategoryContent(lll.href,lll.innerHTML);

}

else if (ccc.getAttribute('state')=='-')

{

ccc.setAttribute('state','+');

}

}

else if (e.button==1 && tt=='A')

{

var aaa=$e('Category articles:'+e.target.innerHTML)

aaa || loadCategoryContent(e.target.href,e.target.innerHTML);

$e('Category articles:'+e.target.innerHTML).style.zIndex=categoryListViewTop++;

e.preventDefault();

}

}

//Handle clicks on categories

document.addEventListener('click',categoryClick,true);

function categoryClick(e)

{

var t=e.target;

if (!e.shiftKey && !e.ctrlKey && t.tagName=='A')

{

if (t.href.match(/\/wiki\/Category:/))

{

var realurl = t.href;

var title = t.innerHTML;

$e('categoryTreeView') || showCategoryBrowser();

$e('Category:'+title) || insertRootCategory(realurl,title);

$e('Subcategories:'+title) || loadCategoryContent(realurl,title);

// selectCategory(title);

e.preventDefault();

}

}

}

function insertRootCategory(u,t)

{

$a($e('categoryTreeView'),categoryTreeItem(u,t));

}

function categoryTreeItem(u,t)

{

var l=$c('DD');

l.id='Category:' + t;

l.setAttribute('state','+');

l.innerHTML = ''

+ ''

+ ''

+ ' ' + t + '';

return l;

}

function categoryListItem(u,t)

{

var l=$c('LI');

l.id='Category:' + t;

l.setAttribute('state','+');

l.innerHTML = ' ' + t + '';

return l;

}

function loadCategoryContent(u,t)

{

var d=$c('DL');

d.id='Subcategories:'+t;

d.innerHTML='loading...';

$a($e('Category:'+t),d);

var d=$c('DIV');

d.id='Category articles:'+t; d.setAttribute('class','categoryArticleLinks');

d.innerHTML='loading...';

d.style.zIndex=0;

$a($e('categoryListView'),d);

var cbSuccess=function(x,c)

{

insertSubcategories(t,c);

insertArticles(t,c);

return true;

}

var cbFailure=function(x,c)

{

alert(x.statusText);

return true;

}

loadText(u,cbSuccess,cbFailure);

}

function insertSubcategories(t,c)

{

var ccc=$e('Category:'+t);

var ddd=$e('Subcategories:'+t);

$r(ccc,ddd);

var d=$c('DL'); d.id='Subcategories:'+t;

var h=$ee(c,'H2');

if (h.length>1 && h[h.length-2].innerHTML=='Subcategories')

{

var lll=$c('div');

var pp;

var hh=h[h.length-2].nextSibling;

while (hh.tagName!='H2')

{

pp=hh.nextSibling;

$a(lll,hh);

hh=pp;

};

var hhh=$ee(lll,'A');

for (var i=0; i

{

$a(d,categoryTreeItem(hhh[i].href,hhh[i].innerHTML));

}

}

else

{

ccc.setAttribute('state','0');

}

$a(ccc,d);

}

function insertArticles(t,c)

{

var ddd=$e('Category articles:'+t);

ddd.innerHTML='';

var d=$c('UL');

var h=$ee(c,'H2');

var lll=$c('div');

var pp;

var hh=h[h.length-1].nextSibling;

while (hh.tagName!='DIV')

{

pp=hh.nextSibling;

$a(lll,hh);

hh=pp;

};

// var hhh=$ee(lll,'A');

// for (var i=0; i

// {

// $a(d,categoryListItem(hhh[i].href,hhh[i].innerHTML));

// }

$a(ddd,lll);

}

function showCategoryBrowser ()

{

var cb=constructCategoryBrowser();

$a($e('globalWrapper'),cb);

$e('categoryTreeView').addEventListener('click',categoryTreeClick,true);

$e('categoryListView').addEventListener('click',categoryListClick,true);

$e('categoryArticleView').addEventListener('click',categoryListClick,true);

document.addEventListener('doubleclick',categoryIconCloseClick,true);

}

function categoryIconCloseClick (e)

{

document.removeEventListener('doubleclick',categoryIconCloseClick,true);

$r($e('globalWrapper'),$e('categoryBrowser'));

}

function constructCategoryBrowser ()

{

return $d('categoryBrowser','

'

+'

'

+'

');

}

//DOM shortcuts

//$e=function(id) {var d=document.getElementById(id); if (d) {return d} else {alert ("Couldn't find id: "+id)};}

$e=function(id) {return document.getElementById(id);}

$ee=function(parent,tag) {return parent.getElementsByTagName(tag)}

$c=function(tag) {return document.createElement(tag)}

$d=function(id,i) {var d=$c('DIV'); d.id=id; d.innerHTML=i; return d}

$cc=function(tag,id,i) {var d=$c(tag); d.id=id; d.innerHTML=i; return d}

$r=function(parent,child) {return parent.removeChild(child)}

$a=function(parent,child) {return parent.appendChild(child)}

//DOWNLOADER

function loadText(url,cb1,cb2) {

var x = window.XMLHttpRequest ? new XMLHttpRequest()

: window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP")

: false;

var c=document.createElement("div");

if (x) {

x.onreadystatechange=function() {

x.readyState==4 && textLoaded(x,c,cb1,cb2)};

x.open("GET",url,true);

x.setRequestHeader('Accept','text/*');

x.send(null); }

}

function textLoaded(x,c,cb1,cb2) {

x.status==200

&& ((c.innerHTML=x.responseText) && cb1 && cb1(x,c))

|| ( cb2 && cb2(x,c) || alert(x.statusText));

}

//XML helper functions

function findDescendantById(node, id) {

if (node.id == id) { return node; }

var i, c;

for (i = node.firstChild; i != null; i=i.nextSibling) {

c = findDescendantById(i,id);

if (c != null)

return c; }

return null;

}

//