sc: apply html paging to 404 errors
[sheet.git] / sc.plp
diff --git a/sc.plp b/sc.plp
index bbcd9c91102c181cefb9a0c325ca7b8527693f43..042719abfc79cab58320c5e1393abf11d004acb5 100644 (file)
--- a/sc.plp
+++ b/sc.plp
@@ -24,14 +24,14 @@ my %scvers = (
 
 $Request ||= 'bw';
 $Request = 'lotv' if $Request eq '2';
-my %scver = %{ $scvers{$Request} }
-       or Abort("Requested version $Request not available", '404 unknown');
+my %scver = %{ $scvers{$Request} // {} }
+       or Html(), Abort("Requested version <q>$Request</q> not available", '404 request not found');
 
 my $datafile = "sc-units-$Request.inc.pl";
 
 Html({
        title => "$scver{title} unit cheat sheet",
-       version => '1.1',
+       version => '1.2',
        description => [
                "Reference of $scver{game} unit properties,"
                . " comparing various statistics of all the units in $scver{name}"
@@ -45,8 +45,8 @@ Html({
                $scver{major} < 2 ? qw' bw broodwar brood war ' :
                qw' starcraft2 lotv hots wol ',
        ],
-       stylesheet => [qw'light'],
-       raw => '<link rel="stylesheet" type="text/css" media="all" href="/sc.css?1.1" title="light">',
+       stylesheet => [qw( light dark )],
+       raw => '<link rel="stylesheet" type="text/css" media="all" href="/sc.css?1.2">',
        data => [$datafile],
 });
 
@@ -103,12 +103,12 @@ sub coltoggle {
 :><table class="units">
 <thead><tr>
        <th><:= coltoggle(exists $get{order} ? 'race' : 'source' => '') :></th>
-       <th><:= coltoggle(name => 'name') :></th>
-       <th class="val min" title=minerals><:= coltoggle(cost => 'cost') :></th>
-       <th class="val gas">gas</th>
+       <th class="unit-name"><:= coltoggle(name => 'name') :></th>
+       <th class="val unit-min" title=minerals><:= coltoggle(cost => 'cost') :></th>
+       <th class="val unit-gas">gas</th>
        <th class="val time"><:= coltoggle(build => 'build') :></th>
        <th class="unit" colspan="2"><:= coltoggle(qw'size size') :></th>
-       <th class="unit" colspan="2">attr</th>
+       <th class="unit unit-attr" colspan="2">attr</th>
        <th class="val unit-hp"><:= coltoggle(HP => 'hp') :></th>
        <th class="val unit-shield">shield</th>
        <th class="val unit-armor" title="armor">⛨</th>
@@ -264,8 +264,8 @@ sub showrangeint {
                $_->{hp} += $_->{shield} if $_->{shield};
 
                return (
-                       '<td class="val min">' . ($_->{min} // ''),
-                       '<td class="val gas">' . ($_->{gas} || ''),
+                       '<td class="val unit-min">' . ($_->{min} // ''),
+                       '<td class="val unit-gas">' . ($_->{gas} || ''),
                        defined $_->{transform} ? sprintf('<td class="val time">%.0f',
                                $_->{transform},
                        ) :
@@ -280,7 +280,8 @@ sub showrangeint {
                        sprintf('<td class="unit unit-%s" title="%4$s%3$s">%s',
                                $_->            {cargo} < 0 ? ('supply',           T => 'transport') :
                                $_->{upgraded}->{cargo} < 0 ? ('supply magic-opt', T => 'optional transport') :
-                               $_->{attr}->{flying}    ? ('air', F => 'flying') :
+                               $_->            {attr}->{flying} ? ('air',           F => 'flying') :
+                               $_->{upgraded}->{attr}->{flying} ? ('air magic-opt', F => 'potentially flying') :
                                $_->{attr}->{structure} ? ('x',   B => 'building') :
                                (
                                        [qw( x s m l l h h h h )]->[ $_->{cargo} ],
@@ -289,7 +290,7 @@ sub showrangeint {
                                ),
                                defined $_->{size} && sprintf('⌀%.1f ', $_->{size}),
                        ),
-                       sprintf('<td class="val unit%s">%s',
+                       sprintf('<td class="val unit unit-pop%s">%s',
                                defined $_->{pop} && $_->{pop} < 0 && ' unit-supply',
                                defined $_->{pop} && $_->{pop} == .5 ? '½' : $_->{pop},
                        ),
@@ -318,7 +319,8 @@ sub showrangeint {
                                $_->{attr}->{massive}
                                        && '<span class="unit-massive" title="massive">⚓</span>',
                        ),
-                       '<td class="val unit-hp">' . $_->{hp} // '',
+                       $_->{hp} < 0 ? '<td class="val unit-hp" title="invulnerable">∞' :
+                       '<td class="val unit-hp">' . showrangeint($_->{hp}, $_->{upgraded}->{hp}),
                        $_->{shield} ? sprintf('<td class="val unit-shield">%.0f%%<td',
                                100 * $_->{shield} / $_->{hp}
                        ) : '<td colspan=2',
@@ -347,10 +349,10 @@ sub showrangeint {
                                && qq'<span class="unit unit-jump" title="$_->{attr}->{jump}">↕</span>',
                        '<td class="unit-magic">' . showmagic($_),
                        !$_->{attack}->[1] ? () : (
-                               '<tr><td colspan=12>', showattack($_, 1), '<td colspan=3>'
+                               '<tr><th class="cat" colspan="2"><td colspan=10>', showattack($_, 1), '<td colspan=3>'
                        ),
                        !$_->{attack}->[2] ? () : (
-                               '<tr><td colspan=12>', showattack($_, 2), '<td colspan=3>'
+                               '<tr><th class="cat" colspan="2"><td colspan=10>', showattack($_, 2), '<td colspan=3>'
                        ),
                        "\n"
                );
@@ -445,7 +447,8 @@ sub showrangeint {
 
 <dl>
 <dt>cost
-       <dd>minerals and gas required to create one unit
+       <dd><span class="unit-min">minerals</span> and
+               <span class="unit-gas">gas</span> required to create one unit
        <dd>includes total expenses if based on existing units
 <dt>build
        <dd>relative time needed to create at least one unit