X-Git-Url: http://git.shiar.net/sheet.git/blobdiff_plain/e24a09c638a103745a9b7b7e557d3222de2d1275..4b71762936d38dfebc9aa8093777e44aad5b41ab:/common.inc.plp diff --git a/common.inc.plp b/common.inc.plp index f7ca700..afec9d1 100644 --- a/common.inc.plp +++ b/common.inc.plp @@ -78,7 +78,7 @@ sub stylesheet { return map { sprintf( '', - $_ eq $style ? 'stylesheet' : 'alternate stylesheet', "/$_.css?1.12", $_ + $_ eq $style ? 'stylesheet' : 'alternate stylesheet', "/$_.css?1.13", $_ ) } @avail; } @@ -99,6 +99,24 @@ sub checkmodified { $header{'Last-Modified'} = time2str($lastmod); } +sub Data { + my ($filename) = @_; + my @data = eval { + open my $cache, '<:raw', "data/$filename.json" + or return do "$filename.inc.pl"; # silent fallback to original code + require JSON; + local $/; # slurp + return JSON::decode_json(readline $cache); + }; + if ($! or $@ or !@data or !$data[0]) { + die ['Table data not found', $@ || $!]; + } + if (@data == 1 and ref $data[0] eq 'HASH' and not %{$data[0]}) { + die ['Table data missing']; + } + return wantarray ? @data : $data[0]; # list compatibility like do does +} + sub Html { my ($meta) = @_; @@ -196,13 +214,20 @@ EOT BEGIN { $PLP::ERROR = sub { - my ($text, $html) = @_; - warn $text; + my ($message, $html) = @_; + if (ref $message) { + warn join ': ', @{$message}; + $html = shift @{$message}; + } + else { + warn $message; + $message = []; + } unless ($PLP::sentheaders) { Html({nocache => 1}); say '

Page unavailable

'; } - Alert("Fatal error: $html."); + Alert("Fatal error: $html.", @{$message}); }; }