generate.pl now bases verbose output on a template
authorTony Cook <tony@develop-help.com>
Wed, 4 Jan 2012 01:45:32 +0000 (12:45 +1100)
committerTony Cook <tony@develop-help.com>
Wed, 4 Jan 2012 01:51:50 +0000 (12:51 +1100)
MANIFEST
site/cgi-bin/admin/generate.pl
site/templates/admin/generate.tmpl [new file with mode: 0644]

index b41ac9b..1284527 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -523,6 +523,7 @@ site/templates/admin/edit_steps.tmpl
 site/templates/admin/error.tmpl
 site/templates/admin/file_edit.tmpl
 site/templates/admin/filelist.tmpl
+site/templates/admin/generate.tmpl
 site/templates/admin/grouplist.tmpl
 site/templates/admin/helpicon.tmpl     Help icon template for admin templates
 site/templates/admin/image_edit.tmpl   Edit a single image
index a085f51..f779ce1 100755 (executable)
@@ -48,27 +48,29 @@ if ($cgi->param("r")) {
 
 my $type_name;
 my $progress = $cgi->param('progress');
+my ($suffix, $permessage);
+my %acts;
+my $callback;
 my $good = eval {
   if (generate_button()) {
-    my $callback;
     if ($progress) {
       $| = 1;
+      %acts = $req->admin_tags;
+      my $temp_result = $req->response("admin/generate", \%acts);
+      (my ($prefix), $permessage, $suffix) =
+       split /<:\s*iterator\s+(?:begin|end)\s+messages\s*:>/, $temp_result->{content};
+
       my $charset = $cfg->charset;
-      print <<HTML;
-Content-Type: text/html; charset=$charset
-
-<?xml version="1.0" encoding="$charset"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" >
-<html>
-  <head>
-    <title>Regenerating your site</title>
-    <link rel="stylesheet" href="/css/admin.css" type="text/css" />
-  </head>
-  <body id="regen">
-  <h1>Regenerating</h1>
-HTML
-      $callback = sub { print "<div>",escape_html($_[0]),"</div>" };
+      print "Content-Type: ", $temp_result->{type}, "\n";
+      print "\n";
+      print $prefix;
+      $acts{message} = "";
+      $acts{ifHead} = 0;
+      $acts{ifRegenError} = 0;
+      $callback = sub {
+       $acts{message} = escape_html($_[0]);
+       print BSE::Template->replace($permessage, $cfg, \%acts);
+      };
     }
     if (defined $id) {
       my $article;
@@ -95,7 +97,9 @@ HTML
                        $callback or return;
                        if (!$data->{count} &&
                            $data->{set} ne $last_set) {
-                         print "<h2>Regenerating $data->{set} pages</h2>\n";
+                         local $acts{ifHead} = 1;
+                         $acts{message} = "Regenerating $data->{set} pages";
+                         print BSE::Template->replace($permessage, $cfg, \%acts);
                          $last_set = $data->{set};
                        }
                        $callback->($note);
@@ -108,8 +112,9 @@ HTML
        my ($extra) = grep $_->{name} eq $name, @extras
          or die { error_code => "EXTRANOTFOUND", message => "No extra named $name found" };
 
-       print "<p>Generating ", escape_html($extra->{name}), "</p>\n"
-         if $progress;
+       if ($progress) {
+         $callback->("Generating $extra->{name}");
+       }
        generate_one_extra($articles, $extra);
        $type_name = "of extra $extra->{name}";
       }
@@ -153,7 +158,8 @@ unless ($good) {
     # page build error of some sort
     if ($progress) {
       # just do it inline
-      print qq(<p class="error">Error during regeneration: ) . escape_html($error) . "</p>\n";
+      local $acts{ifRegenError} = 1;
+      $callback->("Error during regeneration: $error");
     }
     elsif ($req->want_json_response) {
       my $result =
@@ -174,8 +180,7 @@ unless ($good) {
 }
 
 if ($progress) {
-  print qq!<p>Done <a href="/cgi-bin/admin/menu.pl">Return to admin menu</a></p>\n!;
-  print "</body></html>\n";
+  print $suffix;
 }
 else {
   if (!$error && $baseurl eq $cfg->admin_url("menu") || $cgi->param("m")) {
@@ -232,6 +237,35 @@ any redirect URL.
 
 =back
 
+=head1 OUTPUT
+
+C<generate.pl>'s verbose output uses the template
+F<admin/generate.tmpl>.  Beyond the base admin tags the following tags
+are available:
+
+=over
+
+=item *
+
+iterator begin messages ... iterator end messages - this isn't a
+normal iterator, they're just used to split the result into a prefix,
+per message template and suffix.  Don't expect common iterator utility
+tags to work here.
+
+=item *
+
+message - the message content to display
+
+=item *
+
+ifHead - true if the message is intended as a heading
+
+=item *
+
+ifRegenError - true if the message is a fatal regeneration error.
+
+=back
+
 =head1 AUTHOR
 
 Tony Cook <tony@develop-help.com>
diff --git a/site/templates/admin/generate.tmpl b/site/templates/admin/generate.tmpl
new file mode 100644 (file)
index 0000000..2c866d0
--- /dev/null
@@ -0,0 +1,20 @@
+<:wrap admin/base.tmpl title => "Regenarate site":>
+
+<h1>Regenerating</h1>
+
+<:iterator begin messages:>
+<:switch:>
+<:case RegenError:>
+<p class="error message"><:message:></p>
+<:case Head:>
+<h2><:message:></h2>
+<:case default:>
+<div><:message:></div>
+<:endswitch:>
+<:iterator end messages:>
+
+<p><a href="<:adminurl menu:>">Return to admin menu</a></p>
+
+<p><font size="-1">BSE Release <:release:></font></p>
+</body>
+</html>