diff --git a/www/index.pl b/www/index.pl index 168ac61..b26e304 100755 --- a/www/index.pl +++ b/www/index.pl @@ -305,7 +305,7 @@ sub manjslist { # For JS: (Already sorted) # [ - # ["System", "Full name", [ + # ["System", "Full name", "short" [ # [ "package", "version", [ # [ "section", "locale"||null ], # ... @@ -319,7 +319,7 @@ sub manjslist { my %sys; push @{$sys{$_->{system}}}, $_ for (@$m); [ - map [ $self->{sysbyid}{$_}{name}, $self->{sysbyid}{$_}{full}, + map [ $self->{sysbyid}{$_}{name}, $self->{sysbyid}{$_}{full}, $self->{sysbyid}{$_}{short}, do { my %pkgs; for(@{$sys{$_}}) { @@ -394,7 +394,7 @@ sub man { my $man = getman($self, $name, $hash, $m); $self->htmlHeader(title => $name); - dl id => 'nav', ' '; # To be filled in by JS + div id => 'nav', ' '; # To be filled in by JS h1 $man->{name}; p; diff --git a/www/man.css b/www/man.css index 949c9f1..a243a6f 100644 --- a/www/man.css +++ b/www/man.css @@ -41,9 +41,12 @@ td { padding: 1px 5px; font-size: 12px; border-left: 1px solid #ccc; } #nav { background: #f0f8ff; color: #036; float: right; padding: 8px; width: 250px; margin-bottom: 10px; -webkit-border-radius: 8px; -moz-border-radius: 8px; border-radius: 8px; } -#nav > dt { font-weight: bold; } +#nav a.global, #nav i.global { float: right; font-family: "Verdana"; font-size: 13px } +#nav i.global { font-style: normal; padding: 3px 5px; color: #aaa } +#nav dl { clear: right } +#nav dl > dt { font-weight: bold; } #nav a { font-size: 13px; } -#nav i { font-style: normal; font-size: 12px; padding-left: 7px; color: #aaa } +#nav dl i { font-style: normal; font-size: 12px; padding-left: 7px; color: #aaa } #nav b { font-family: "Verdana"; font-size: 13px; background: #cde; padding: 3px 5px; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } diff --git a/www/man.js b/www/man.js index e528555..4b7b1bb 100644 --- a/www/man.js +++ b/www/man.js @@ -1,5 +1,8 @@ /* The following functions are part of a minimal JS library I wrote for VNDB.org */ +var expanded_icon = '▾'; +var collapsed_icon = '▸'; + function byId(n) { return document.getElementById(n) } @@ -30,32 +33,121 @@ function tag() { } return el; } +function setText(obj, txt) { + if(obj.textContent != null) + obj.textContent = txt; + else + obj.innerText = txt; +} /* What follows is specific to manned.org */ -if(byId('nav')) { - var nav = byId('nav'); +// TODO: Fix the 'pkg' link +// TODO: Allow showing/hiding old package versions individually. +// TODO: Allow complete hiding of old systems. (And enable that by default) + +navShowLocales = false; +navHasLocale = false; +navHasOldSys = false; +navHasHiddenSys = false; // OldSys, actually + +function navCreate(nav) { + setText(nav, ''); + + navHasLocale = navHasHiddenSys = navHasOldSys = 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; + navHasOldSys = navHasOldSys || isold; + navHasHiddenSys = navHasHiddenSys || (isold && !sys[4]); + + var pkgnum = 0; var dd = tag('dd', null); - for(var j=0; j 0) - pdd.appendChild(tag(' ')); - pdd.appendChild(man[2] == VARS.hash ? tag('b', txt) : tag('a', {href:'/'+VARS.name+'/'+man[2]}, txt)); + + if(sys[4]) { + for(var j=0; j 0 && sys[3][j-1][0] == sys[3][j][0]) + continue; + + if(navCreatePkg(dd, sys, sys[3][j])) + pkgnum++; } - dd.appendChild(pdt); - dd.appendChild(pdd); } - nav.appendChild(dt); - nav.appendChild(dd); + + dl.appendChild(tag('dt', sys[1], tag('a', + {href:'#', _sys: sys, onclick: function() { this._sys[4] = !this._sys[4]; navCreate(nav); return false }}, + sys[4] ? expanded_icon : collapsed_icon))); + if(sys[4] && pkgnum > 0) + dl.appendChild(dd); } + + navCreateLinks(nav); + nav.appendChild(dl); } + +function navCreatePkg(dd, sys, pkg) { + var mannum = 0; + var pdd = tag('dd', null); + + for(var k=0; k 0) + pdd.appendChild(tag(' ')); + pdd.appendChild(man[2] == VARS.hash ? tag('b', txt) : tag('a', {href:'/'+VARS.name+'/'+man[2]}, txt)); + mannum++; + } + } + + if(mannum > 0) { + dd.appendChild(tag('dt', tag('a', {href:'/browse/'+sys[2]+'/'+pkg[0]}, pkg[0]), tag('i', pkg[1]))); + dd.appendChild(pdd); + return true; + } + return false; +} + + +function navCreateLinks(nav) { + nav.appendChild(tag('a', {'class':'global',href:'#',onclick: function() { }}, collapsed_icon + 'pkg')); + + var t = (navHasHiddenSys ? collapsed_icon : expanded_icon) + 'sys'; + nav.appendChild(!navHasOldSys ? tag('i', {'class':'global'}, t) : tag('a', + { 'class':'global', + title: 'Expand/collapse "old" systems.', + href: '#', + onclick: function() { + for(var i=0; i