#!/usr/bin/perl -T use strict; use warnings; use CGI::Carp 'fatalsToBrowser'; use XML::Simple; use CGI::Simple; use LWP::UserAgent; use Cache::FileCache; my $cache = new Cache::FileCache({ namespace => 'html_issues', cache_root => '/var/whatwg/cache', cache_depth => 1 }); binmode STDOUT, ':utf8'; my $cgi = new CGI::Simple; my (undef, $action, @data) = split '/', $cgi->path_info; if ($action eq 'source') { print "Content-Type: text/plain\r\n\r\n"; open my $f, $0 or die "Error opening self: $!"; print do { local $/; <$f> }; exit; } print qq{Content-Type: text/html; charset=utf-8\r\n\r\n}; print qq{\n}; my $ua = new LWP::UserAgent; sub request_xml { my (@args) = @_; my $req = new HTTP::Request(POST => 'http://www.whatwg.org/issues/getdata'); $req->content_type('text/plain'); $req->content(join '', map "$_\n", @args); my $res = $ua->request($req); die "Request failed: $res->status_line\n" unless $res->is_success; my $xml = XMLin($res->content, ForceArray => [qw(folder email vote)]); die "Request failed: $xml\n" unless ref $xml; return $xml; } sub get_message_body { my ($id) = @_; my $msg = $cache->get("messagebody $id"); return $msg if $msg; my $xml = request_xml(body => $id); $msg = $xml->{body}; $cache->set("messagebody $id", $msg); return $msg; } sub get_folders_xml { my $xml = $cache->get("folders"); return $xml if $xml; $xml = request_xml('folders'); $cache->set("folders", $xml, "24 hours"); return $xml; } sub get_folder_xml { my ($id) = @_; my $xml = $cache->get("folder $id"); return $xml if $xml; $xml = request_xml(emails => $id); $cache->set("folder $id", $xml, "24 hours"); return $xml; } if (not $action) { my $xml = get_folders_xml(); print qq{HTML issues list\n}; print qq{

HTML 5 Issues

\n}; print qq{

This is a static copy of http://www.whatwg.org/issues/.

\n}; print qq{\n}; } elsif ($action eq 'folder') { my $xml = get_folder_xml($data[0]); print qq{HTML issues list – $data[0]\n}; print qq{

$data[0]

\n}; print qq{View all messages from this folder.\n}; print qq{\n}; } elsif ($action eq 'message') { my $xml = request_xml(body => $data[0]); print qq{HTML issues list – }.$cgi->escapeHTML($xml->{subject}).qq{\n}; print qq{

}.$cgi->escapeHTML($xml->{subject}).qq{

\n}; print qq{

}.$cgi->escapeHTML($data[0]).qq{\n}; print qq{

Current votes:\n}; if ($xml->{vote}) { print qq{

\n}; } else { print "None."; } print qq{
\n};
    print $cgi->escapeHTML($xml->{body});
    print qq{
\n}; } elsif ($action eq 'folder_expand') { my $xml = get_folder_xml($data[0]); print qq{HTML issues list – all messages from $data[0]\n}; print qq{

$data[0]

\n}; print qq{\n}; } elsif ($action eq 'expand') { my $xml = get_folders_xml(); print qq{HTML issues list – all messages\n}; print qq{\n}; }