X-Git-Url: http://git.shiar.net/sheet.git/blobdiff_plain/26a71f36c68773b18095911e99be7294cbd66f39..3afdb629211b357a3760e14b92e9966b2d414a0d:/common.inc.plp diff --git a/common.inc.plp b/common.inc.plp index 2976cbe..6d6a532 100644 --- a/common.inc.plp +++ b/common.inc.plp @@ -72,12 +72,10 @@ sub stylesheet { } or warn "Unable to create style cookie: $@"; } - $style ||= exists $cookie{style} && $styles{ $cookie{style} } || $avail[0]; - - return map { sprintf( - '', - $_ eq $style ? 'stylesheet' : 'alternate stylesheet', "/$_.css?1.14", $_ - ) } @avail; + $style ||= $styles{$_} for $cookie{style} || (); + my $setstyle = $style; + $style ||= $avail[0]; + return $setstyle; } sub checkmodified { @@ -106,7 +104,7 @@ sub Data { local $/; # slurp return JSON::decode_json(readline $cache); }; - if ($! or $@ or !@data or !$data[0]) { + if ($@ or !@data or !$data[0]) { die ['Table data not found', $@ || $!]; } if (@data == 1 and ref $data[0] eq 'HASH' and not %{$data[0]}) { @@ -141,18 +139,34 @@ sub Html { $header{content_type} = "text/html; charset=$meta->{charset}" unless $PLP::sentheaders; exit if $ENV{REQUEST_METHOD} eq 'HEAD'; - unshift @{ $meta->{raw} }, stylesheet($meta->{stylesheet}); - push @{ $meta->{raw} }, ( - '', + unshift @{ $meta->{raw} }, ( + '', ); + $meta->{stylesheet} = stylesheet($meta->{stylesheet}); + + if (my $img = $meta->{image}) { + my $proto = sprintf('http%s://', !!$ENV{HTTPS} && 's'); + my $url = "$proto$ENV{HTTP_HOST}/$img"; + push @{ $meta->{raw} }, ( + qq(), + ); + } my ($file) = $ENV{SCRIPT_FILENAME} =~ m{ ([^/]+) \.plp$ }x; + $meta->{canonical} //= "/$file" . ($Request ne '' && "/$Request"); + if (my $url = $meta->{canonical}) { + $url = "https://sheet.shiar.nl$url"; + push @{ $meta->{raw} }, qq(); + } + PLP_START { # leading output say ''; - say qq(); + my $rootattr = ''; + $rootattr .= qq( class="s-$_") for $meta->{stylesheet} || (); + say qq(); say ''; say ''; say sprintf '', $_ @@ -166,6 +180,10 @@ sub Html { say ''; say for map { @{$_} } $meta->{raw} || (); say '' if $Dev; + say "" for join($/, + "if (m = window.matchMedia('(monochrome)'))", + "(m.onchange = e => document.documentElement.classList.toggle('s-mono', e.matches))(m);", + ); say ''; say ''; say sprintf '', $file;