]> iEval git - gruntmaster-page.git/blobdiff - lib/Gruntmaster/Page.pm
Fix and update standings
[gruntmaster-page.git] / lib / Gruntmaster / Page.pm
index bce618c92b4216900b5327b908a4eeaecdbcd3ae..71f517317b1e763d88ffcbdb3883c4820a82b115 100644 (file)
@@ -3,14 +3,14 @@ package Gruntmaster::Page;
 use 5.014000;
 use strict;
 use warnings;
-use parent qw/Exporter/;
-our @EXPORT_OK = qw/generate/;
 
 use Fcntl qw/:flock/;
 use File::Basename qw/fileparse/;
-use File::Slurp qw/write_file/;
+use File::Path qw/make_path/;
+use File::Slurp qw/read_file write_file/;
 use IO::Compress::Gzip qw/gzip/;
 use IO::File;
+use Gruntmaster::Data;
 
 our $VERSION = '0.001';
 our @generators;
@@ -25,8 +25,7 @@ sub declaregen{
        my ($generator, $regex) = @_;
        $generator = "Gruntmaster::Page::$generator";
        eval "require $generator";
-       my $gensub = $generator->can('generate') or die "No such generator: $generator";
-       push @generators, [$regex,  $gensub];
+       push @generators, [$regex,  $generator];
 }
 
 {
@@ -34,9 +33,12 @@ sub declaregen{
        my $contest = qr,(?:ct/$component/)?,;
        declaregen Index                        => qr,^index$,;
        declaregen Learn                        => qr,^learn$,;
+       declaregen Account                      => qr,^account$,;
+       declaregen Us                           => qr,^us/index$,;
+       declaregen 'Us::Entry'          => qr,^us/$component$,;
        declaregen Ct                           => qr,^ct/index$,;
        declaregen 'Ct::Entry'          => qr,^ct/$component/index$,;
-       declaregen St                           => qr,^ct/$component/log/st$,;
+       declaregen St                           => qr,^${contest}log/st$,;
        declaregen Log                          => qr,^${contest}log/(?:\d+|index)$,;
        declaregen 'Log::Entry' => qr,^${contest}log/job/$component$,;
        declaregen Submit                       => qr,^${contest}submit$,;
@@ -45,25 +47,41 @@ sub declaregen{
 }
 
 sub generate{
-       my ($path) = @_;
+       my ($path, $topic) = @_;
        my ($path_noext, $ext) = $path =~ m/^(.*)\.(.*)$/;
-       my $basename = fileparse $path_noext;
+       my ($basename, $directories) = fileparse $path_noext;
+       make_path $directories;
 
        IO::File->new(">$path_noext.var")->close unless -f "$path_noext.var";
        flock my $lockfh = IO::File->new("<$path_noext.var"), LOCK_EX;
        open my $typemap, ">$path_noext.var.new";
        say $typemap "URI: $basename\n";
-       for my $gen (@generators) {
-               my ($regex, $generator) = @$gen;
-               next unless $path_noext =~ $regex;
+
+       my $fill_typemap = sub {
                for my $lang (@{LANGUAGES()}) {
-                       my $page = $generator->($path, $lang);
+                       my $page = $_[0]->($lang);
                        write_file "$path_noext.$lang.$ext.new", $page;
                        say $typemap "URI: $basename.$lang.$ext\nContent-Language: $lang\nContent-Type: " . CONTENT_TYPES->{$ext} . "\n";
                        gzip \$page => "$path_noext.$lang.gz.$ext.new", Minimal => 1;
                        say $typemap "URI: $basename.$lang.gz.$ext\nContent-Language: $lang\nContent-Encoding: gzip\nContent-Type: " . CONTENT_TYPES->{$ext} . "\n";
                }
-               last
+       };
+
+       if ($topic eq 'genpage') {
+               for my $gen (@generators) {
+                       my ($regex, $generator) = @$gen;
+                       next unless $path_noext =~ $regex;
+                       $fill_typemap->(sub { $generator->generate($path, $_[0]) });
+                       last
+               }
+       } else {
+               my $get_article = sub {
+                       my $article = read_file "$ENV{GRUNTMASTER_ARTICLE_ROOT}/$basename.$_[0]";
+                       my $title   = read_file "$ENV{GRUNTMASTER_ARTICLE_ROOT}/$basename.$_[0].title";
+                       Gruntmaster::Page::Base::header($_[0], $title) . $article . Gruntmaster::Page::Base::footer($_[0])
+               };
+
+               $fill_typemap->($get_article);
        }
 
        for my $lang (@{LANGUAGES()}) {
@@ -74,6 +92,13 @@ sub generate{
        close $typemap;
 }
 
+sub gensrc{
+       my ($job) = @_;
+       my $ext = job_extension $job;
+       make_path "log/src/";
+       write_file "log/src/$job.$ext", job_inmeta($job)->{files}{prog}{content};
+}
+
 1;
 __END__
 # Below is stub documentation for your module. You'd better edit it!
This page took 0.024271 seconds and 4 git commands to generate.