/* The following functions are part of a minimal JS library I wrote for VNDB.org */ var expanded_icon = '▾'; var collapsed_icon = '▸'; var http_request = false; function ajax(url, func, async) { if(!async && http_request) http_request.abort(); var req = (window.ActiveXObject) ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest(); if(req == null) return alert("Your browser does not support the functionality this website requires."); if(!async) http_request = req; req.onreadystatechange = function() { if(!req || req.readyState != 4 || !req.responseText) return; if(req.status != 200) return alert('Whoops, error! :('); func(req); }; url += (url.indexOf('?')>=0 ? ';' : '?')+(Math.floor(Math.random()*999)+1); req.open('GET', url, true); req.send(null); } function byId(n) { return document.getElementById(n) } function byName(){ var d = arguments.length > 1 ? arguments[0] : document; var n = arguments.length > 1 ? arguments[1] : arguments[0]; return d.getElementsByTagName(n); } function byClass() { // [class], [parent, class], [tagname, class], [parent, tagname, class] var par = typeof arguments[0] == 'object' ? arguments[0] : document; var t = arguments.length == 2 && typeof arguments[0] == 'string' ? arguments[0] : arguments.length == 3 ? arguments[1] : '*'; var c = arguments[arguments.length-1]; var l = byName(par, t); var ret = []; for(var i=0; i createTextNode * tag('tagname', tag(), 'string', ..) -> createElement(), appendChild(), .. * tag('tagname', { class: 'meh', title: 'Title' }) -> createElement(), setAttribute().. * tag('tagname', { }, ) -> create, setattr, append */ function tag() { if(arguments.length == 1) return typeof arguments[0] != 'object' ? document.createTextNode(arguments[0]) : arguments[0]; var el = typeof document.createElementNS != 'undefined' ? document.createElementNS('http://www.w3.org/1999/xhtml', arguments[0]) : document.createElement(arguments[0]); for(var i=1; i0 ? l[i-1] : l[l.length-1]; else sel = l[i+1] ? l[i+1] : l[0]; } obj.ds_selectedId = sel.id.substr(7); } // set selected class for(var i=0; i 0) r += bsCharacters.charAt(v<<(5-b)); return r; } function bsDecode(s) { var a = []; for(var i=0; i= 97 ? 97 : 24; a.push(!!((n>>4)&1), !!((n>>3)&1), !!((n>>2)&1), !!((n>>1)&1), !!(n&1)); } return a; } /* Structure of VARS.mans: [ ["System", "Full name", "short", [ [ "category", "package", "version", [ [ "section", "locale"||null ], ... ], oldvisible // <- this is only set by JS ], ... ], oldvisible // <- this is only set by JS ], ... ] The godawful navigation code desperately needs a rewrite. */ navShowLocales = false; navHasLocale = false; function navCreate(nav) { setText(nav, ''); view = navSerialize(); navHasLocale = false; var dl = tag('dl', null); for(var i=0; i 0 && VARS.mans[i-1][0] == sys[0]; if(typeof sys[4] === 'undefined') sys[4] = !isold; var pkgnum = 0; var dd = tag('dd', null); if(sys[4]) for(var j=0; j 0) dl.appendChild(dd); } navCreateLinks(nav); nav.appendChild(dl); } function navCreatePkg(nav, view, dd, sys, n) { var pkg = sys[3][n]; var isold = n > 0 && sys[3][n-1][0] == pkg[0] && sys[3][n-1][1] == pkg[1];; if(isold && !pkg[4]) return false; var mannum = 0; var pdd = tag('dd', null); for(var i=0; i 0) pdd.appendChild(tag(' ')); pdd.appendChild(man[2] == VARS.hash ? tag('b', txt) : tag('a', {href:'/'+VARS.name+'/'+man[2]+'?v='+view}, txt)); mannum++; } } if(mannum > 0) { dd.appendChild(tag('dt', tag('a', {href:'/pkg/'+sys[2]+'/'+pkg[0]+'/'+pkg[1]+'/'+pkg[2]}, pkg[1]), isold || !sys[3][n+1] || sys[3][n+1][0] != pkg[0] || sys[3][n+1][1] != pkg[1] ? null : tag('a', {href:'#', _pkgn: pkg[0]+'-'+pkg[1], _pkgi:n, 'class':'expand', title: 'Show/hide historical versions of this package', onclick: function() { for(var j=this._pkgi+1; j 0 && VARS.mans[i-1][0] == VARS.mans[i][0]) VARS.mans[i][4] = i > 1 && VARS.mans[i-2][0] == VARS.mans[i-1][0] ? VARS.mans[i-1][4] : !!a.shift(); for(var i=0; i 0 && VARS.mans[i][3][j-1][0] == VARS.mans[i][3][j][0] && VARS.mans[i][3][j-1][1] == VARS.mans[i][3][j][1]) VARS.mans[i][3][j][4] = j > 1 && VARS.mans[i][3][j-2][0] == VARS.mans[i][3][j-1][0] && VARS.mans[i][3][j-2][1] == VARS.mans[i][3][j-1][1] ? VARS.mans[i][3][j-1][4] : !!a.shift(); } if(byId('nav')) { navLoad(VARS.view||''); navCreate(byId('nav')); } // The "more..." links on the homepage. if(byId('systems')) { var f = function() { var l = byName(this.parentNode, 'a', 'hidden'); for(var i=0; i